Refactor XML processing to combine HTML fields and update product naming convention
This commit is contained in:
83
drmaterac.pl/estella-xml.php
Normal file
83
drmaterac.pl/estella-xml.php
Normal file
@@ -0,0 +1,83 @@
|
||||
<?php
|
||||
error_reporting( E_ALL ^ E_NOTICE ^ E_STRICT ^ E_WARNING ^ E_DEPRECATED );
|
||||
include '../_plugins/medoo.php';
|
||||
include '../settings.php';
|
||||
|
||||
$mdb = new medoo( [
|
||||
'database_type' => '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 '<p>Deaktywowano produkt: ' . $product_to_delete . '</p>';
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
$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);
|
||||
$doc -> loadXML($file);
|
||||
$xpath = new DOMXPath($doc);
|
||||
|
||||
$products = $xpath->query('//Document/Produkt');
|
||||
|
||||
@@ -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 <product>
|
||||
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 <product> w nowym XML
|
||||
$new_product = $xml->addChild('product');
|
||||
|
||||
// Ponowna iteracja przez dzieci oryginalnego <product>, aby skopiować nieobrazkowe elementy
|
||||
// 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
|
||||
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 <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, '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 '<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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user