Jump to content

XML genreátor na export velkeho mnozstvi produktu


mardon

Recommended Posts

Možná už někdo zkušenější řešil export XML produktů pro vyhledávače z e-shopu, který má více jak 6000 produktů.K exportu používám skript

<?php
include(dirname(__FILE__).'/../config/config.inc.php'); 
$p=Product::getProducts(10, 0, 0, 'id_product', 'desc', false); 
$products=Product::getProductsProperties(10, $p); 
header("Content-Type: text/xml");
echo '<?xml version="1.0" encoding="utf-8"?>
';
foreach ($products as $row) {
$img=Product::getCover($row['id_product']);
echo '

'.strtr($row['name'], "&", "&").'
'.strtr(strip_tags($row['description_short']), "&", "&").'
http://www.vasedomena.cz'.$row['link'].'
http://www.vasedomena.cz/img/p/'.$row['id_product'].'-'.$img['id_image'].'.jpg
'.($row['price']*1).'
0
';
}
echo '';
?> 



Skript funguje, ale jen pro asi 3500 vyrobků , pro větší množství skript nevrátí vygenerované XML zřejmě protože se mu nedostává paměti. Na hostingu je pro PHP přiděleno 64MB paměti a zvyšovat nechtějí.

Kámen úrazu je možná v řádcích

$p=Product::getProducts(10, 0, 0, 'id_product', 'desc', false); 
$products=Product::getProductsProperties(10, $p);



které vracejí z db všechny sloupce pro produkty, ted i ty které se pak v XML nevypisují.
Nevíte někdo jak jednoduše dostat (pomocí funkce z prestashopu) z db jen ty položky, které pak použít pro export XML?

Link to comment
Share on other sites

  • 1 month later...

skript, který jsem vypsala výše pro velké množství produktů vyžaduje velké množství paměti, takže doporučuji před změnou hostinhu zjisti nastavení php_memory_limit, já jsem na localhostu zkoušela něco přes 6000 výrobků a chodilo mi to při nastavení 128MB php_memory_limit.Na druhou starnu skript výše uvedený, podle mě zbytečně natahuje hodně údajů o produktech do paměti, které pak nejsou použity v XML exportu, takže by se to asi dalo upravit tak, aby nebyl tak náročný na paměť.

Link to comment
Share on other sites

A co máš za hosting. Já už jsem ho měnil po třetí a ani na jednom to nechodilo.... teď mám ONEBIT.cz


Sem na www.isol.cz, disponuju tam 128MB paměti...

Jinak jsem tady na foru v anglický části viděl xml feed jen na vybrané kategorie, tak bych zkusil ten a regnout víckrát shop na katalozích s jiným feedem....
Link to comment
Share on other sites

Ahojda mám tarif profi.. Možná webcool by to vyřešil, ale už to jsou poro mě velký peníze :)
Jinak mimo xml feedu řeším i import obrázků ty mě tam taky nějak nejedou.. ale to jestli se mi tam v importu nevyskytla nějaká chybička vše to opraví jen obrázky nenahraje... Nátož regenerování obrázků..Ale jinak bych byl spokojen za hosting

Link to comment
Share on other sites

Ale pořád mě zlobí to množství produktů, jako dodavatel tam je jedinej velkoobchod v republice kterej má xmlko pro eshopy a importní modul nějak zlobí.
Eshopu bych měl večer dát aktuální xml a on by do rána měl zapnou zboží, který je opět skladem, vypnout to, co došlo, přidat případně nové, zkontrolovat ceny....
Bohužel pořád dělá chyby.

Link to comment
Share on other sites

  • 8 months later...

Ahoj všem tak jsem zpět a stejný problém. sice mi byla paměť navýšena, ale stále se mi do vyhledávačů neimportuije vše... Onebit.cz a cool nejvyšší arif.. Tak fakt nevím co s tím. Ještě mi byla dána rada vytvořit adresář export aby se pouze na tento adresář zvýšila paměť nebo co toje a to v rootu FTP a přesměrovat přes htaccess .. No sice přesměrování se podařilo ale soubor XML feed to nespustí... Prosím o radu co s tím

Link to comment
Share on other sites

Pokud exportujete velký množství produktů, tak to může zlobit bez "varování". Málo paměti, zatížení serveru atd. Někomu to jde a někomu ne. To je export na nic.

Podle mně by to mělo být udělaný univerzálně a pro všechny. To znamená optimalizovaný pro velké množství produktů. Já bych to zkusil exportovat v dávkách, flushovat, možná si udělat dočasný soubor na disku. Nevím co přesně by zabralo. Určitě se to dá udělat pro milion produktů.

Link to comment
Share on other sites

No mě poradili co jsem psal výše že navýšení paměti která je nízká pouza na jeden adresář který je v rootu ftp.. Což jsem učinil a přesměroval htaccess ale bohužel tím jsem skončil, protože jsem lama a nevím co by v tom adresáři mělo být.. mě psali že nic. což je blbost a aspon tam musí byt index.php. co se týče dávkování tak jsem o tomto uvažoval ale opúět nevím jak to udělat.. Děkuji za každou informaci

Ps když jsem to měl původně tak to exportovalo 2300 produktů pak mi byla navýšena paměť a exportuje to jednou tolik 4600 produktu potřebuji 9000 ...

Link to comment
Share on other sites

  • 2 weeks later...

No tak poskočil jsem o krok dále udělal jsem na ftpku adesář export do kterýho jesm nakopíroval scripty jako zbozi.php atd. v .htaccess jsem provedl redirect a světe div se odexportuje to 6500 položek.. místo 4300 ale problém je ten že výseldný xml feed odkazuje na adresu export.navitym.cz já potřebuji pouze aby to odkazovalo navitym.cz.. u obrázků je to správně.. Nevíte někdo jako to upravit?? Předpokládám že by to mělo být v tom xml feedu.. Díky za radu

Link to comment
Share on other sites

Pokud je potřeba exportovat řádově více než několik tisíc produktů, tak skript, který to dělá v jednom průchodu zákonitě v určité chvíli narazí na time_limit a přidělené množství paměti v PHP. Hranice kolapsu exportu se mění a záleží taky na momentálním zatížení serveru a množství dat uložených u produktů.

Chystám export, který omezení serveru řeší a umožní exportovat v podstatě neomezený počet produktů. Budu ho otestovat na 100 000 produktech a 16 MB paměti. Měly by tím skončit všechny problémy různých hostingů při XML exportech.

Link to comment
Share on other sites

No to by bylo super.. Já jsem to obešel tímto způsobem a funguje to aspoň částečně, protože tím, že byl nově vytvořen adresář a změnil se odkaz tak jakkoliv se snažím upravit xml feed tak mě to odkazuje na tento vytvořený adresář tudíž se zákazník ke zboží nedostane.. obrázky to generuje dobře...Potřebuji zatím poradit s tímto ... Pak až bude new export tak přejdu ale teď bych rád věděl jak to udělat..

Link to comment
Share on other sites

No mám to takhle zkusil jsem to tam fláknout na tvrdo samozřejměn bez výsledků

<?php
$shopUrl = 'http://www.navitym.cz'; // adresa shopu včetně http://
include(dirname(__FILE__).'/config/config.inc.php'); // cesta ke config souboru
include(dirname(__FILE__).'/init.php');
error_reporting(0);
$p=Product::getProducts(3, 0, 6500, 'id_product', 'desc', false); // ceština je v databázi zapsaná pod číslem 3
$products=Product::getProductsProperties(3, $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 '

'.htmlspecialchars(str_replace("&", "&", $row['name']), ENT_QUOTES).'
'.htmlspecialchars(str_replace("&", "&",strip_tags($row['description_short'])), ENT_QUOTES).'
'.http://navitym.cz.'/product.php?id='.$row['link'].'
'.$shopUrl.'/img/p/'.$row['id_product'].'-'.$img['id_image'].'.jpg
'.($row['price']*1).'
neni skladem 
';
}
echo '';
?>

Link to comment
Share on other sites

'.http://navitym.cz.'/product.php?id='.$row['link'].'



flaknute na tvrdo je samozrejme zle, skus, co davaju zapisy

'.$row['link'].'
'.str_replace("export", "www", $row['link']).'
'.str_replace("export", "", $row['link']).'
http://navitym.cz/product.php?id='.$row['link'].'

Link to comment
Share on other sites

Jinak takhle vypadá výsledná xml feed

−

−

Konvice metal TEFAL VitesseS INOX s termoregulátorem 1,7L (BI962513)

−

Elegance v matném nerezu 

Objem (l): 1.7
Podstavec: středový konektor - 360°
Typ ohřevu: ukrytá topná spirála - ploché dno
Výklopné víko: bezpečnostní
Příkon (W): 2400
Regulace

−

http://export.navitym.cz/product.php?id_product=8966

http://www.navitym.cz/img/p/8966-7073.jpg
1463
TEFAL

Na dotaz 



Správně by měla adresa vypadat takto http://navitym.cz/product.php?id_product=8966

Link to comment
Share on other sites

  • 4 months later...

Podařilo se vám to někomu 100% rozchodit? Mám na onebitu 96M memory limit a pustí mě to max 4500 položek. Potřeboval bych okolo 10.000.

Pokud je potřeba exportovat řádově více než několik tisíc produktů, tak skript, který to dělá v jednom průchodu zákonitě v určité chvíli narazí na time_limit a přidělené množství paměti v PHP. Hranice kolapsu exportu se mění a záleží taky na momentálním zatížení serveru a množství dat uložených u produktů.

Chystám export, který omezení serveru řeší a umožní exportovat v podstatě neomezený počet produktů. Budu ho otestovat na 100 000 produktech a 16 MB paměti. Měly by tím skončit všechny problémy různých hostingů při XML exportech.


Je už nějaký hotový produkt?
Link to comment
Share on other sites

Nakonec jsem to tedy musel vyřešit navýšením memory limit na 128MB. Bohužel tím vlastně jen za feed platím asi o 800 Kč ročně víc. Další problém může nastat při navyšování počtu zboží do budoucna. Kvalitní modul by to vyřešil určitě lépe. Škoda.

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...