Jistě se shodneme na tom, že vyhledávač zboží od Seznamu, zbozi.cz, generuje nezanedbatelný traffic a zisky každého eshopu. Samozřejmě za předpokladu, že takový internetový obchod je v tomto vyhledávači zboží registrován a poskytuje data v potřebném formátu. CubeCart ve své základní „výbavě“ generátor XML feedu nemá a nenašel jsem ho ani jako dostupný modul.
Vzhledem ke svým programátorským (ne)schopnostem jsem hledal jednoduché řešení, které by zahrnovalo maximálně drobnou úpravu hotového skriptu. Řešení jsem našel zde a jmenuje se XML_Serializer. Jedná se PEAR balíček pro práci s XML dokumenty. Nainstalovat PEAR na sdílený webhosting se mi podařilo vcelku bez potíží, čili jsem mohl přikročit k vlastnímu zakomponování všeho potřebného do CubeCartu.
Základem je soubor (já si ho nazval genfeed.php), který se bude starat o vlastní generování XML feedu. Soubor je umístěný v rootu domény, respektive v adresáři, kde se nachází instalace Cubecartu.
Obsah souboru je následující:
// Nastaveni absolutni cesty k rootu instalace PEARu
$path = ‘/data/www/example.com/www.example.com/pear/PEAR’;
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
// Vlozeni tridy XML_Serializer
require("XML/Serializer.php");
// Vlozeni promennych (CubeCart)
include_once("includes/ini.inc.php");
include_once("includes/global.inc.php");
//* <rf> search engine friendly url mod */
include_once("includes/sef_urls.inc.php");
$sefroot = sef_script_name();
if($config[‘sef’] == 0 && preg_match(‘#’.$glob[‘rootRel’].$sefroot.‘#i’, $_SERVER[‘PHP_SELF’])) {
// if this script got called by the shop script and we aren’t using sef urls then redirect to index.php
Header("Location: ".$glob[‘rootRel’]."index.php");
}
/* <rf> end of mod */
// Inicializace databaze
include_once("classes/db.inc.php");
$db = new db();
// vlozeni funkci
include_once("includes/functions.inc.php");
$config = fetchDbConfig("config");
// SQL dotaz na tabulku produktu
$prods = $db->select("SELECT productId, image, price, name, sale_price, description, stock_level, useStockLevel FROM ".$glob[‘dbprefix’]."CubeCart_inventory ORDER BY productId DESC");
for($i=0;$i<count($prods);$i++){
$xml[] = array (
‘PRODUCT’ => $prods[$i][‘name’],
‘DESCRIPTION’ => strip_tags($prods[$i][‘description’]),
‘AVAILABILITY’ => ($prods[$i][‘useStockLevel’]=="1" && $prods[$i][‘stock_level’]=="0" ? "-1" : "0"),
‘URL’ => $glob[‘storeURL’].$glob[‘rootRel’].generateProductUrl($prods[$i][‘productId’]),
‘IMGURL’ => $glob[‘storeURL’].$glob[‘rootRel’].‘images/uploads/’.$prods[$i][‘image’],
‘PRICE_VAT’ => ($prods[$i][‘sale_price’]!="0.00" ? $prods[$i][‘sale_price’] : $prods[$i][‘price’])
);
}
// Serializace
$options = array( "addDecl" => true, "defaultTagName" => "SHOPITEM",
"linebreak" => "\n", "encoding" => "UTF-8", "rootName" => "SHOP", "indent" => "\t");
$serializer = new XML_Serializer($options);
$serializer->serialize($xml);
// Výstup
// header("Content-Type: text/xml");
// echo $serializer->getSerializedData();
// Zapis do souboru feed.xml – predklada se robotum
$vystup = $serializer->getSerializedData();
$f = fopen ($glob[‘rootDir’]."/feed/feed.xml", "w");
fwrite($f, $vystup);
fclose ($f);
?>
Vzhledem k několika tisícům položek v databázi skript pouze vygeneruje výsledný XML feed do adresáře. Abych nemusel spouštět skript ručně, používám na to CRON. Výsledkem je XML soubor (feed.xml), který vypadá následovně:
<?xml version="1.0" encoding="UTF-8"?>
<SHOP>
<SHOPITEM>
<PRODUCT>Lavera – Men Care: Voda po holení</PRODUCT>
<DESCRIPTION>S BIO přesličkou a přírodními minerály. Rostlinné BIO esence z vilínu, měsíčku a echinacei pleť po holení efektivně uklidňují. Pečující receptura z rostlinnými látkami a BIO aloe vera poskytují ultimativní hydrataci. Mořské minerály, kyselina křemičitá a BIO Přeslička mají dezinfekční působení.</DESCRIPTION>
<AVAILABILITY>0</AVAILABILITY>
<URL>http://www.example.com/lavera/lavera-men-care-voda-po-holeni-prod_10.html</URL>
<IMGURL>http://www.example.com/images/uploads/la26042.jpg</IMGURL>
<PRICE_VAT>209.00</PRICE_VAT>
</SHOPITEM>
<SHOPITEM>
<PRODUCT>Urtekram: Sprchový gel Růže</PRODUCT>
<DESCRIPTION>Jemný sprchový gel s výtažky z organické růže, organického jasmínu a s přídavkem esenciálního oleje z kakostu. Bez konzervačních látek, barviv, parfémů a živočišného glycerínu. Vhodné i pro citlivou pokožku. Bez syntetických tensidů.</DESCRIPTION>
<AVAILABILITY>0</AVAILABILITY>
<URL>http://www.example.com/urtekram/urtekram-sprchovy-gel-ruze-prod_9.html</URL>
<IMGURL>http://www.example.com/images/uploads/ur8312.jpg</IMGURL>
<PRICE_VAT>205.00</PRICE_VAT>
</SHOPITEM>
</SHOP>
Soubor obsahuje všechny specifikací požadované informace a nyní je možno ho předhodit robotovi zbozi.cz.