From e8eb8f7fb35dcf1f546235e22146f0225e481fda Mon Sep 17 00:00:00 2001 From: Jacek Pyziak Date: Tue, 5 Nov 2024 22:30:50 +0100 Subject: [PATCH] Refactor XML processing to combine HTML fields and update product naming convention --- drmaterac.pl/estella-xml.php | 83 ++++++++++++++++++++++++++++++++++++ drmaterac.pl/xml-convert.php | 2 +- interblue.pl/index.php | 61 ++++++++++++++++++++++++-- 3 files changed, 141 insertions(+), 5 deletions(-) create mode 100644 drmaterac.pl/estella-xml.php diff --git a/drmaterac.pl/estella-xml.php b/drmaterac.pl/estella-xml.php new file mode 100644 index 0000000..bdac60f --- /dev/null +++ b/drmaterac.pl/estella-xml.php @@ -0,0 +1,83 @@ + 'mysql', + 'database_name' => $settings['db']['database'], + 'server' => $settings['db']['host'] , + 'username' => $settings['db']['user'], + 'password' => $settings['db']['password'], + 'charset' => 'utf8' +] ); + +$mdb_dr = new medoo( [ + 'database_type' => 'mysql', + 'database_name' => 'admin_drmaterac', + 'server' => 'dedyk8.cyber-folks.pl', + 'username' => 'admin_drmaterac', + "password" => 'eRbZ]Ioh-0-2]fM+', + 'charset' => 'utf8' +] ); + +$mdb -> query( 'TRUNCATE TABLE estella_products' ); + +$file = file_get_contents( 'https://b2b.estella.eu/generator/22413dfa-be6d-473d-b301-282351168cf6/xml/aa6648e6-c4a8-4af6-b6ae-33954c47886f' ); +$doc = new DOMDocument(); +$doc -> loadXML( $file ); +$xpath = new DOMXPath( $doc ); + +$products = $xpath->query('//Document/Produkt'); + +foreach ( $products as $product ) +{ + $indeks = $xpath -> query( 'Indeks', $product ); + $indeks_value = $indeks -> item(0) -> nodeValue; + + $nazwa = $xpath -> query( 'Nazwa', $product ); + $nazwa_value = $nazwa -> item(0) -> nodeValue; + + $ean = $xpath -> query( 'Ean', $product ); + $ean_value = $ean -> item(0) -> nodeValue; + + if ( $mdb -> count( 'estella_products', [ 'sku' => $indeks_value ] ) == 0 ) + { + $mdb -> insert( 'estella_products', [ + 'sku' => $indeks_value, + 'name' => $nazwa_value, + 'ean' => $ean_value + ] ); + } + + if ( $mdb -> count( 'estella_products_old', [ 'sku' => $indeks_value ] ) == 0 ) + { + $mdb -> insert( 'estella_products_old', [ + 'sku' => $indeks_value, + 'name' => $nazwa_value, + 'ean' => $ean_value + ] ); + } +} + +$products_to_delete = []; + +$old_products = $mdb -> select( 'estella_products_old', [ 'sku' ] ); +foreach ( $old_products as $product_tmp ) +{ + if ( $mdb -> count( 'estella_products', [ 'sku' => $product_tmp['sku'] ] ) == 0 ) + { + $products_to_delete[] = $product_tmp['sku']; + } +} + +foreach ( $products_to_delete as $product_to_delete ) +{ + $product_id_tmp = $mdb_dr -> get( 'materac_product', 'id_product', [ 'reference' => $product_to_delete ] ); + if ( $product_id_tmp ) + { + $mdb_dr -> update( 'materac_product', [ 'active' => 0 ], [ 'id_product' => $product_id_tmp ] ); + $mdb_dr -> update( 'materac_product_shop', [ 'active' => 0 ], [ 'id_product' => $product_id_tmp ] ); + echo '

Deaktywowano produkt: ' . $product_to_delete . '

'; + } +} \ No newline at end of file diff --git a/drmaterac.pl/xml-convert.php b/drmaterac.pl/xml-convert.php index a3e4e4e..1302f59 100644 --- a/drmaterac.pl/xml-convert.php +++ b/drmaterac.pl/xml-convert.php @@ -1,7 +1,7 @@ loadXML($file); +$doc -> loadXML($file); $xpath = new DOMXPath($doc); $products = $xpath->query('//Document/Produkt'); diff --git a/interblue.pl/index.php b/interblue.pl/index.php index d51144e..1a50881 100644 --- a/interblue.pl/index.php +++ b/interblue.pl/index.php @@ -29,6 +29,14 @@ 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 foreach ($product->children() as $child) { $child_name = $child->getName(); @@ -42,17 +50,35 @@ foreach ($source_xml->product as $product) { $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 w nowym XML $new_product = $xml->addChild('product'); - // Ponowna iteracja przez dzieci oryginalnego , aby skopiować nieobrazkowe elementy + // Ponowna iteracja przez dzieci oryginalnego , aby skopiować nieobrazkowe i nie-HTML elementy foreach ($product->children() as $child) { $child_name = $child->getName(); - // Pomijanie elementów obrazów - if (!preg_match('/^image_\d+$/', $child_name)) { + // 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; @@ -62,12 +88,18 @@ foreach ($source_xml->product as $product) { $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 $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, 'opis_krotki_html') !== false || strpos($child_name, 'opis_dlugi_korzysci_html') !== false) { + if (strpos($child_name, 'html') !== false) { $node = dom_import_simplexml($new_child); $no = $node->ownerDocument; $node->appendChild($no->createCDATASection($value)); @@ -77,6 +109,27 @@ foreach ($source_xml->product as $product) { } } + // 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 '
' lub inny separator, jeśli potrzebujesz + } + $combined_opis_html .= $opis_dlugi_korzysci_html; + } + + // Dodanie połączonego pola do nowego , 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);