ZenCart – úprava XML generátoru pro nový formát feedu zbozi.cz
Pokud používáte internetový obchod ZenCart a zároveň srovnávač zboží na zbozi.cz tak jste pravděpodobně zaznamenali nový formát XML feedu pro zbozi.cz. Podpora starého formátu končí 31.7.2016 a do té doby je třeba upravit XML generátor tak aby generoval feed v novém formátu. Seznam uvolnil specifikaci nového XML feedu a také zpřístupnil validátor nového formátu XML feedu, kde si můžete zkontrolovat správnost formátu vašeho feedu pro zbozi.cz. Zveřejňujeme zde proto návod na základní změnu xml generátoru, který používáme v našich instalacích ZenCart.
Tato úprava nezahrnuje všechny možnosti, které nový XML formát nabízí, ale stačí k tomu aby XML feed odpovídal požadavkům nového formátu. Pokud požadujete kompletní podporu všech funkcí zbozi.cz pak doporučujeme zvážit přechod na PrestaShop. V naší nabídce najdete i migraci dat ze ZenCart na PrestaShop.
Postup úpravy XML generátoru pro ZenCart
Veškeré úpravy se provádějí v souboru rss.php, který je umístěn v adresáři administrace ZenCart. Soubor rss.php si stáhnete pomocí FTP klienta (například FileZilla) a upravíte v textovém editoru. Jako textový editor doporučujeme použít takový, který zvládá znakovou sadu UTF-8. Například PSPad.
Nejprve najdeme začátek a konec sekce, pro generování xml feedu pro ZenCart. Veškeré úpravy budeme provádět mezi těmito místy:
1 2 3 4 5 |
<?php case ('seznam'): $text= '<?xml version="1.0" encoding="' . CHARSET . '"?> '; ?> |
1 2 3 |
$zipfile = new zipfile(); $filedata = $text; $zipfile -> add_file($filedata, "seznam.xml"); |
Mezi výše uvedenými místy najdeme následující kód:
1 2 3 |
$products = $db->Execute($sql_products); $text.= "\n<SHOP>\n"; while(!$products->EOF) |
a přidáme definici verze xml feedu takto:
1 2 3 |
$products = $db->Execute($sql_products); $text.= "\n" . '<SHOP xmlns="http://www.zbozi.cz/ns/offer/1.0">' . "\n"; while(!$products->EOF) |
Dále přidáme tag ITEM_ID tak, že přidáme za tag SHOPITEM kód s ITEM_ID:
1 2 |
$text.= " <SHOPITEM>\n"; $text.= " <ITEM_ID>" . $product_id . "</ITEM_ID>\n"; |
Následně změníme tag PRODUCT na nový PRODUCTNAME:
1 |
$text.= " <PRODUCT>" . clean($products->fields['products_name']) . "</PRODUCT>\n"; |
změníme na nový:
1 |
$text.= " <PRODUCTNAME>" . clean($products->fields['products_name']) . "</PRODUCTNAME>\n"; |
Nakonec upravíme tag ceny. V nové verzi je podporován pouze tag PRICE_VAT, takže odstraníme původní kód:
1 2 |
$text.= " <PRICE>". $price . "</PRICE>\n"; $text.= " <VAT>".($tax_rate/100) . "</VAT>\n"; |
a místo něj vložíme následující kód:
1 |
$text.= " <PRICE_VAT>" . ((($price)*($tax_rate+100))/100) . "</PRICE_VAT>\n"; |
Pokud úpravy provedete správně pak by, po přegenerování xml feedu, měl nový feed odpovídat požadavkům zbozi.cz a měl by vypadat takto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
<?php case ('seznam'): $text= '<?xml version="1.0" encoding="' . CHARSET . '"?>'; ?> <?php $counts = $db->Execute("SELECT count(*) as number_active FROM " . TABLE_PRODUCTS . " WHERE products_status='1'"); $sql_products .= "select p.products_id, pd.products_name, pd.products_description, p.products_price, p.products_tax_class_id, p.products_image, m.manufacturers_name "; $sql_products .= "from " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m on (p.manufacturers_id = m.manufacturers_id), "; $sql_products .= TABLE_PRODUCTS_DESCRIPTION . " pd "; $sql_products .= "where p.products_id = pd.products_id "; $sql_products .= "and p.products_status = 1 and pd.language_id = '" . $_SESSION['languages_id']. "'"; $products = $db->Execute($sql_products); $text.= "\n" . '<SHOP xmlns="http://www.zbozi.cz/ns/offer/1.0">' . "\n"; while(!$products->EOF) { $product_id = $products->fields['products_id']; $products_description = strip_tags($products->fields['products_description']); if (strlen($products_description) > 500){ $products_description = substr($products_description, 0, strrpos(substr($products_description, 0, 500), ' ')) . '...'; } $specials = $db->Execute("select specials_new_products_price from " . TABLE_SPECIALS . " where products_id = '" . (int)$product_id . "' and status='1'"); if ($specials->RecordCount() > 0) { $price = $specials->fields['specials_new_products_price']; } else { $price = $products->fields['products_price']; } $tax_rate=zen_get_tax_rate_value($products->fields['products_tax_class_id']); $plink = zen_seo_href_link(zen_get_info_page($products->fields['products_id']), 'products_id=' . $products->fields['products_id'], 'NONSSL', false); $text.= " <SHOPITEM>\n"; $text.= " <ITEM_ID>" . $product_id . "</ITEM_ID>\n"; $text.= " <MANUFACTURER>" . clean($products->fields['manufacturers_name']) . "</MANUFACTURER>\n"; $text.= " <PRODUCTNAME>" . clean($products->fields['products_name']) . "</PRODUCTNAME>\n"; $text.= " <DESCRIPTION>" . clean($products_description) . "</DESCRIPTION>\n"; $text.= " <URL>" . $plink . "</URL>\n"; $text.= " <IMGURL>".HTTP_SERVER.DIR_WS_CATALOG.DIR_WS_IMAGES. $products->fields['products_image'] . "</IMGURL>\n"; $text.= " <PRICE_VAT>" . ((($price)*($tax_rate+100))/100) . "</PRICE_VAT>\n"; $text.= " </SHOPITEM>\n"; $products->MoveNext(); } $text.= "</SHOP>"; $zipfile = new zipfile(); $filedata = $text; $zipfile -> add_file($filedata, "seznam.xml"); $filename = "../rss/seznam.zip"; $fd = fopen ($filename, "wb"); $out = fwrite ($fd, $zipfile -> file()); fclose ($fd); echo '<br><b>XML SEZNAM a JYXO vytvořeno!</b><br>Celkem: ' . $counts->fields['number_active'] . ' produktů.<br>'; break; |
Ověřit si to můžete pomocí validátoru xml feedu.
V případě, že u nás máte webhosting ZenCartu a na uvedenou úpravu si netroufáte pak nás kontaktujte a provedeme úpravu za vás.