Jump to content

[VYŘEŠENO] věčné téma - XML feedy


cendaprnda

Recommended Posts

Ahoj všem předem bych chtěl říct, že jsem poctivě prošel všechno co se tu o zbozi.cz napsalao a vyzkoušel různé verze feedu. V závěru jsem našel jeden, který mi skutečně funguje, zde je výpis

<?php

$shopUrl = 'www.i-hrackarstvi.cz';
$noShowCategory = "7,8,9,69,70,71,72,73,74,75,76,77,78,79";
$cfgFile = dirname(__FILE__) . '/config/settings.inc.php';
if (!file_exists($cfgFile))
{
   die('Skript musi byt umisten v rootu prestashopu v config/settings.inc.php musi byt nastaveni databaze.');
}

require_once($cfgFile);
$db = @MySQL_Connect(_DB_SERVER_, _DB_USER_, _DB_PASSWD_);
if (!$db)
{
   die('Nemohu se spojit s databazi.');
}

MySQL_Select_DB(_DB_NAME_, $db);
MySQL_Query("SET NAMES 'utf8'");
$prefix = "ps_";
header("Content-Type: text/xml");
echo '<?xml version="1.0" encoding="utf-8"?>';
?>
<?php
echo "\n\n";


$res = MySQL_Query("
       SELECT
               p.id_product,
               p.quantity,
               p.price,
               p.reduction_price,
               p.reduction_percent,
               p.reduction_from,
               p.reduction_to,
               pl.name,
               pl.description_short,
               pl.link_rewrite,
               i.id_image
       FROM {$prefix}product p
       JOIN {$prefix}product_lang pl USING(id_product)
       JOIN {$prefix}image i USING(id_product)
       WHERE i.cover = 1 AND NOT (SELECT COUNT(*)
               FROM {$prefix}category_product cp
               WHERE cp.id_product = p.id_product
                       AND cp.id_category IN($noShowCategory))
       ORDER BY p.id_product", $db); 

$currentDate = date('Y-m-d');

while ($row = MySQL_Fetch_Assoc($res))
{
   $desc = strip_tags(html_entity_decode($row['description_short'], ENT_COMPAT, 'utf-8'));

   if ($result['reduction_from'] == $result['reduction_to']
           || ($result['reduction_from'] <= $currentDate
                   && $currentDate <= $result['reduction_to']))
   {
       if ($row['reduction_price'] && $row['reduction_price'] > 0)
       {
           if ($row['reduction_price'] >= $row['price'])
           {
               $reduction = $row['price'];
           }
           else
           {
               $reduction = $row['reduction_price'];
           }
       }
       elseif ($row['reduction_percent'] && $row['reduction_percent'] > 0)
       {
           if ($row['reduction_percent'] >= 100)
           {
               $reduction = $row['price'];
           }
           else
           {
               $reduction = $row['price'] * $row['reduction_percent'] / 100;
           }
       }
   }

   echo "\n";
   echo "\t" . mb_substr($row['name'], 0, 64, 'utf-8') ."\n"; 
   echo "\t" . mb_substr($desc, 0, 512, 'utf-8') . "\n";
   echo "\thttp://" . $shopUrl . "/" . $row['id_product'] .
           "-" . $row['link_rewrite'] . ".html\n";
   echo "\tnew\n";
   echo "\t" . ($row['quantity'] > 0 ? "0" : "73") . "\n";
   echo "\thttp://" . $shopUrl . "/img/p/" .$row['id_product'] .
           "-" . $row['id_image'] . "-large.jpg\n";
   echo "\t" . round($row['price']-$reduction/1.20) . "\n";
   echo "\n";
}

echo "\n";

?>



Chtěl jsem samozřejmě t samé i pro Heuréku, a hledal feedy, ale ani jeden z nich mi nefunguje a to samé bohužel i feedy které jsou pro ostatní porovnávače cen. Za boha netuším kde je problém. Vždy se mi zobrazí pouze prázdná obrazovka, nic víc nic mí. Zkoušel jsem zjistit kde je problém a pomocí eacha a "zalomítkování" příkazů jsem došel k tomu že problém vzniká na řádku (češtinu mám jako 4tý jazyk)

$p=Product::getProducts(4, 0, 0, 'id_product', 'desc', false); // ceština je v databázi zapsaná pod číslem 3



pokud tento příkaz "zalomítkuju a dám za něj echo tak se echo provede, pokud ho nechám aktivní tak se echo neprovede a obrazovka je bílá. Nenašel by se někdo kdo by mě řekl kde je chyba. Díky moc. Tady ještě celý kód který mě osobně končí bílou obrazovkou a nic nevypíše

<?php


echo '<?xml version="1.0" encoding="utf-8"?>;

$shopUrl = 'http://i-hrackarstvi.cz';      // adresa shopu včetně http://
include(dirname(__FILE__).'/config/config.inc.php'); // cesta ke config souboru
include(dirname(__FILE__).'/init.php');
echo '<?xml version="1.0" encoding="utf-8"?>;
error_reporting(0);
$p=Product::getProducts(4, 0, 0, 'id_product', 'desc', false); // ceština je v databázi zapsaná pod číslem 3
$products=Product::getProductsProperties(4, $p); // ceština je v databázi zapsaná pod číslem 3


header("Content-Type: text/xml");
echo '<?xml version="1.0" encoding="utf-8"?>
';
foreach ($products as $row) {
$img=Product::getCover($row['id_product']);
echo '

'.str_replace("&", "&", $row['name']).'
'.str_replace("&", "&",strip_tags($row['description_short'])).'
'.$row['link'].'
'.$shopUrl.'/img/p/'.$row['id_product'].'-'.$img['id_image'].'.jpg
'.($row['price']*1).'
0
';
}
echo '';
*/

?>



Používám hosting onebit.cz a jedu na Prestashopu 1.3.2 (www.i-hrackarstvi.cz)

Díky všem za rady

Link to comment
Share on other sites

Ahoj, mas tam 2x zle echo, kde nemas ukoncovaci apostrof pred bodkociarkou, skus riadky s nasledujucim kodom vymazat

echo '<?xml version="1.0" encoding="utf-8"?>';


V php prve echo musi (malo by) ist az za header - nechaj len

header("Content-Type: text/xml");
echo '<?xml version="1.0" encoding="utf-8"?>
';




Inak ten skript je cely mizerny - funguje pre male shopy
a/ getProducts(4,0,0, ...) nacitava vsetky produkty pre dany jazyk vratane vyrobcu, dodavatela, ....
b/ foreach ($products as $row) {$img=Product::getCover($row['id_product']); ... } - FUJ pre kazdy produkt je dotaz do databazy na zistenie cisla obrazku ... vsak preco neotestovat MySQL a nepolozit tisic+ selektov za sebou :D
c/mozno je xml pre porovnavace lepsie vytvarat manualne po kazdej aktualizacii ponuky produktov alebo cronom
Porovnavac stahuje uz pripraveny xml subor a necaka ci sa skriptu podari nieco vygenerovat

Nieco chysta tuk66 - http://www.prestashop.com/forums/viewreply/319977/ - predpokladam, ze xml export bude konfigurovatelny. Myslim, ze je lepsie zaplatit si funkcny modul a usetrit tak za navysovanie pamate pri hostingoch, ktora je potrebna len kvoli blbo napisanym skriptom.

Link to comment
Share on other sites

Bohužel ani středník a vymazání zbytečných echo nepomohlo :(. Pravděpodobně to budu řešit investicí do xml exportéru, on není problém to nastavit v Cronu, osobně se mě tohle řešení i líbí, nicméně každý den kdy člověk nevysí na heuréce jsou zákazníci kteří prostě nejsou :(

Link to comment
Share on other sites

Díky Janovi, který pro mě naspal upravený feed to již funguje.Hlavní problém byl pravděpodobně v tom že potřebuju exportovat cca 6000 položek a pokud se použil ten druhý kratší script, výsledek byl nulový protože došlo k zahlcení paměti. Víc by o tom asi napsal přímo on sám, tímto mu chcu ještě jednou poděkovat když tvrdošíjně odmítal veškeré hmotné statky. Pokud bude souhlasit přidám sem jeho upravený feed

Zdeněk

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...