Posts Tagged ‘eshop’

CubeCart: generování XML feedu pro zbozi.cz

Pondělí, Duben 14th, 2008

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í:

<?php
  // 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.