148 lines
5.4 KiB
PHP
148 lines
5.4 KiB
PHP
<?php
|
|
// Włącz wyświetlanie błędów dla celów debugowania
|
|
error_reporting(E_ALL);
|
|
ini_set('display_errors', 1);
|
|
|
|
// Definiowanie źródłowego URL pliku XML i nazwy pliku docelowego
|
|
// $source_url = 'https://sollux-lighting.com/product_feed/news072024/XML_polski_PLN_new_07_2024.xml';
|
|
$source_url = 'https://sollux-lighting.com/product_feed/sollux/XML_polski_PLN_wszystkie.xml';
|
|
$target_file = 'new_products.xml';
|
|
|
|
// Pobranie i załadowanie źródłowego pliku XML
|
|
$source_xml = simplexml_load_file($source_url);
|
|
|
|
if ($source_xml === false) {
|
|
die('Błąd podczas ładowania źródłowego pliku XML.');
|
|
}
|
|
|
|
// Utworzenie nowego dokumentu XML z korzeniem <products>
|
|
$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><products></products>');
|
|
|
|
// Definicja nazw elementów, które zawierają ceny
|
|
$price_fields = [
|
|
'cena_detaliczna_brutto_pln',
|
|
// Dodaj tutaj inne pola cen, jeśli istnieją
|
|
// 'cena_inna_field',
|
|
];
|
|
|
|
// Iteracja przez każdy produkt w źródłowym pliku XML
|
|
foreach ($source_xml->product as $product) {
|
|
// Tablica do przechowywania adresów URL obrazów
|
|
$images = [];
|
|
|
|
// Zmienne do przechowywania zawartości pól HTML
|
|
$opis_krotki_html = '';
|
|
$opis_dlugi_korzysci_html = '';
|
|
|
|
// Zmienne do przechowywania nazwy produktu i SKU
|
|
$original_nazwa_produktu = '';
|
|
$sku = '';
|
|
|
|
// Iteracja przez wszystkie dzieci elementu <product>
|
|
foreach ($product->children() as $child) {
|
|
$child_name = $child->getName();
|
|
|
|
// Sprawdzenie, czy element jest jednym z obrazów (image_1, image_2, ..., image_25)
|
|
if (preg_match('/^image_\d+$/', $child_name)) {
|
|
$url = trim((string)$child);
|
|
|
|
// Dodanie niepustego URL do tablicy obrazów
|
|
if (!empty($url)) {
|
|
$images[] = $url;
|
|
}
|
|
}
|
|
// Zbieranie zawartości pól HTML do połączenia
|
|
elseif ($child_name === 'opis_krotki_html') {
|
|
$opis_krotki_html = (string)$child;
|
|
}
|
|
elseif ($child_name === 'opis_dlugi_korzysci_html') {
|
|
$opis_dlugi_korzysci_html = (string)$child;
|
|
}
|
|
// Zbieranie oryginalnej nazwy produktu
|
|
elseif ($child_name === 'nazwa_produktu') {
|
|
$original_nazwa_produktu = (string)$child;
|
|
}
|
|
// Zbieranie SKU
|
|
elseif ($child_name === 'sku') {
|
|
$sku = (string)$child;
|
|
}
|
|
}
|
|
|
|
// Utworzenie nowego elementu <product> w nowym XML
|
|
$new_product = $xml->addChild('product');
|
|
|
|
// Ponowna iteracja przez dzieci oryginalnego <product>, aby skopiować nieobrazkowe i nie-HTML elementy
|
|
foreach ($product->children() as $child) {
|
|
$child_name = $child->getName();
|
|
|
|
// Pomijanie elementów obrazów i pól HTML, które będą połączone
|
|
if (!preg_match('/^image_\d+$/', $child_name) &&
|
|
$child_name !== 'opis_krotki_html' &&
|
|
$child_name !== 'opis_dlugi_korzysci_html') {
|
|
|
|
// Pobranie wartości elementu
|
|
$value = (string)$child;
|
|
|
|
// Sprawdzenie, czy element jest polem cenowym
|
|
if (in_array($child_name, $price_fields)) {
|
|
// Zamiana kropki na przecinek w wartości ceny
|
|
$value = str_replace('.', ',', $value);
|
|
}
|
|
|
|
// Jeśli jest to nazwa produktu, modyfikujemy jej zawartość
|
|
if ($child_name === 'nazwa_produktu') {
|
|
// Dodanie "Sollux" przed oryginalną nazwą i SKU na końcu
|
|
$value = $original_nazwa_produktu . ' Sollux ' . $sku;
|
|
}
|
|
|
|
// Dodanie elementu do nowego <product>
|
|
$new_child = $new_product->addChild($child_name);
|
|
|
|
// Sprawdzenie, czy zawartość to HTML i potrzeba CDATA
|
|
// Jeśli chcesz zachować tagi HTML, możesz użyć CDATA
|
|
if (strpos($child_name, 'html') !== false) {
|
|
$node = dom_import_simplexml($new_child);
|
|
$no = $node->ownerDocument;
|
|
$node->appendChild($no->createCDATASection($value));
|
|
} else {
|
|
$new_child[0] = htmlspecialchars($value);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Połączenie zawartości pól HTML
|
|
$combined_opis_html = '';
|
|
if (!empty($opis_krotki_html)) {
|
|
$combined_opis_html .= $opis_krotki_html;
|
|
}
|
|
if (!empty($opis_dlugi_korzysci_html)) {
|
|
// Dodanie separatora, np. nowa linia lub spacja
|
|
if (!empty($combined_opis_html)) {
|
|
$combined_opis_html .= "\n"; // Możesz zmienić na '<br />' lub inny separator, jeśli potrzebujesz
|
|
}
|
|
$combined_opis_html .= $opis_dlugi_korzysci_html;
|
|
}
|
|
|
|
// Dodanie połączonego pola <opis_html> do nowego <product>, jeśli zawartość nie jest pusta
|
|
if (!empty($combined_opis_html)) {
|
|
$opis_html = $new_product->addChild('opis_html');
|
|
$node = dom_import_simplexml($opis_html);
|
|
$no = $node->ownerDocument;
|
|
$node->appendChild($no->createCDATASection($combined_opis_html));
|
|
}
|
|
|
|
// Połączenie wszystkich adresów URL obrazów w jeden ciąg oddzielony przecinkami
|
|
$images_str = implode(',', $images);
|
|
|
|
// Dodanie nowego elementu <images> do nowego <product>
|
|
$new_product->addChild('images', htmlspecialchars($images_str));
|
|
}
|
|
|
|
// Zapisanie nowego pliku XML na serwerze
|
|
if($xml->asXML($target_file)) {
|
|
echo "Nowy plik XML został utworzony: $target_file";
|
|
} else {
|
|
echo "Wystąpił błąd podczas zapisywania nowego pliku XML.";
|
|
}
|
|
?>
|