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.
Zdravim chtel jsem se te zeptat jestli by jsi mi nemohl pomoct napriklad pres icq.. s instalaci feedu do CubeCart podle navodu co si zde napsal… asi neco delam spatne… ale nejak mi to nechce fungovat… byl bych to moc zavazan dekuji mnohokrat… na oplatku bych mohl pro tebe umistit reklamni banner na web http://www.nestojitoanizavypaleni.cz/news.php ktery si myslim ze mas docela slusnou navstevnost. Predem dekuji muj email je ( nugg37@centrum.cz )