ceske-sluzby
ceske-sluzby copied to clipboard
XML feedy - podpora variant
Pro některé eshopy je důležité generovat do XML i jednotlivé varianty.
Ano, varianty jsou určitě důležité. Přikládám ještě kousky kódu, které ve woocommerce často používáme a bylo by super integrovat je do pluginu. Viz níže
Kód přesunut: #22
Zdrojový kód jsem přesunul do nového požadavku (nesouvisí s podporou variant).
Prosím, co můžu udělat pro urychlení variant do feedu.
@novetrendy: Získat mi nějaký čas :-) Nebo se do toho pustit sám a pak to mohu jen integrovat...
Nemělo by to být ale nic složitého, zkusím připravit základní verzi na otestování. U každého produktu v hlavním cyklu by se muselo ověřit, zda má nějaké variace a potom by se ve feedu nezobrazoval konkrétní produkt, ale pouze variace. Nebo by se měl zobrazit produkt i variace? To asi spíše logicky ne?
Ve feedu heureka jsou varinaty následovně:
<SHOPITEM>
<ITEM_ID>325236407</ITEM_ID>
<PRODUCTNAME>Adidas Superstar 2 W EUR 36</PRODUCTNAME>
<PRODUCT>Adidas Superstar 2 W EUR 36 - novinka</PRODUCT>
<DESCRIPTION>V rámci kolekce Originals uvádí adidas sportovní obuv The Superstar, která je již od svého vzniku jedničkou mezi obuví. Jejím poznávacím znamením je mimo jiné detaily designové zakončení špičky. Díky kvalitnímu materiálu a trendy vzhledu, podtrženého logy Adidas uvnitř boty i na ní, bude hvězdou vašeho botníku.</DESCRIPTION>
<URL>http://www.obchod-s-obuvi.cz/boty/adidas-superstar-2-w7/eur-36/</URL>
<IMGURL>http://www.obchod-s-obuvi.cz/pictures/403078.jpg</IMGURL>
<IMGURL_ALTERNATIVE>http://www.obchod-s-obuvi.cz/pictures/403080.jpg</IMGURL_ALTERNATIVE>
<MANUFACTURER>Adidas</MANUFACTURER>
<CATEGORYTEXT>Obuv | Dámská obuv</CATEGORYTEXT>
<EAN>5051571703857</EAN>
<PRODUCTNO>G43755</PRODUCTNO>
<PARAM>
<PARAM_NAME>Velikost</PARAM_NAME>
<VAL>EUR 36</VAL>
</PARAM>
<DELIVERY_DATE>2</DELIVERY_DATE>
<DELIVERY>
<DELIVERY_ID>CESKA_POSTA</DELIVERY_ID>
<DELIVERY_PRICE>120</DELIVERY_PRICE>
</DELIVERY>
<ITEMGROUP_ID>ZD563</ITEMGROUP_ID>
</SHOPITEM>
Kde jsou jednotlivé vlastnosti produktu (použité pro variace) a <ITEMGROUP_ID> chápu jako SKU rodičovského produktu, ze kterého jsou variace vytvořeny.
Dobrý den, chci se zeptat, jak to vypadá s variantami. Bohužel jsem loop s variantami ještě neřešil, takže nevím kudy kam, abych si to sám doprogramoval.
Taky bych rád viděl variace. Složité to nebude. Zde jsou snippety kódu, který lze použít.
if ($produkt->is_type("variable")){
foreach($produkt->get_available_variations() as $variation){
$variation = new WC_Product_Variation($variation['variation_id']);
/* Zde již lze získat atributy variace */
$in_stock = $variation->is_in_stock();
$price_vat = $variation->get_regular_price();
$url = get_permalink($produkt->id); // tady by se hodilo jako parametr ty varianty (např. **?attribute_pa_barva=červená&attribute_pa_delka=5m**
}
}
Získání kategorií, separátor by mohl být třeba volitelný z administrace:
$separator = " | ";
$categories = implode(
$separator,
wp_get_object_terms($produkt->id,
'product_cat',
array('orderby' => 'term_group',
'order' => 'ASC',
'fields' => 'names'
)
)
);
Výrobci:
$separator = ", ";
$manufacturers = implode(
$separator,
wp_get_object_terms($produkt->id, 'brand', array("fields" => "names"))
);
Potom mám metodu na zapsání jednoho produktu:
function writeXML($xmlWriter,
$name,
$product_no,
$id,
$description,
$category,
$manufacturers,
$url,
$img_url,
$delivery_date,
$price_vat,
$ean,
$item_group_id){
$xmlWriter->startElement('SHOPITEM' );
$xmlWriter->writeElement('ITEM_ID', $id);
$xmlWriter->writeElement('PRODUCTNAME', $name);
$xmlWriter->startElement('DESCRIPTION');
$xmlWriter->writeCData($description);
$xmlWriter->endElement();
$xmlWriter->writeElement('PRICE_VAT', $price_vat);
$xmlWriter->writeElement('URL', $url);
$xmlWriter->writeElement('IMGURL', $img_url);
$xmlWriter->writeElement('CATEGORYTEXT', $category);
$xmlWriter->writeElement('MANUFACTURER', $manufacturers);
$xmlWriter->writeElement('DELIVERY_DATE', $delivery_date);
if (!empty($ean)) {
$xmlWriter->writeElement('EAN', $ean );
}
if ($item_group_id !== NULL) {
$xmlWriter->writeElement('ITEMGROUP_ID', $item_group_id);
}
$xmlWriter->endElement();
}
Tak jsem to na základě uvedených kódů začal konečně implementovat a každá variace bude vlastně speciální položka feedu. A jak to bude třeba s názvem (PRODUCTNAME
)? Ten zůstane pro všechny variace stejný nebo mu tam třeba automaticky doplníme hodnotu příslušné vlastnosti?
PRODUCTNAME bych vzal title z nadřazeného produktu + vlastnosti varianty. Př: Samolepka Dekor TATRA 576 - Vnitřní - Červená - 17x25cm
Je to složitější než jsem si myslel :-(
- Nemusí být pouze jedna varianta, ale může se vyskytovat i jejich kombinace.
- I jednoduchý produkt může mít doplněné vlastnosti (attributes), a to jak v textové podobě, tak jako taxonomie (a opět jich může být několik najednou).
- Nehledě na to, že pokud budeme automaticky generovat
PRODUCTNAME
, tak tam těch možností přibývá geometrickou řadou.
Zítra zkusím doplnit první verzi na otestování...
První pokus: https://github.com/pavelevap/ceske-sluzby/commit/4851661579e5b8b864ff06c3310869f2cbfd074b
Zatím moc netestováno na reálném webu, možná se tam objeví nějaké problémy. Podporovány by měly být vlastnosti (attributes) u jednoduchých produktů, klasické varianty i jejich kombinace. Původně navržené funkce moc nepočítaly s podobně složitým molochem, takže se to bude muset celé přepsat a rozsekat do jednotlivých metod, jinak to nebude dlouhodobě udržitelné :-)
Dobrý den, feed pro heureka se nezobrazí vůbec a u zbozi nejsou varianty - je stejný jako předtím. Můžu Vám dát přístupy pro otestování.
@novetrendy: Ano, zatím to má na zkoušku pouze Heureka. Objevuje se nějaká chyba? Pošlete prosím přístupy...
CHYBA: Neplatná šablona pro RSS zdroj. Přístupy jsem poslal na email.
@novetrendy: Mělo by to být opraveno, způsobovalo to velké množství variant. Pokud je na webu mnoho položek (produktů + variant dohromady), tak je třeba používat průběžně generovaný .xml
soubor (nově podporován i pro Heureku).
Zítra hned vyzkouším a dám vědět!
Omlouvám se za zdržení, novou verzi jsem nainstaloval, ještě se soubor generuje, ale podle první části to vypadá SUPER! Moc dobrá práce!
@novetrendy: Díky, jak to nakonec dopadlo s vygenerovaným souborem? A co na to Heureka?
To bohužel nevím, protože všichni klienti používají jen zbozi.cz Ale podle mě to odpovídá jejich specifikaci. Jakmile to bude fungovat i pro zbozi.cz můžu dát hned vědět.
Tak bohužel soubor heureka.xml se nevytvoří, pouze heureka-tmp.xml
@novetrendy: Tak to je podivné, už jsem to na jednom webu zkoušel a prošlo to vcelku bez problémů. Mohu poprosit o přístupy? Doplním to po opravě zrovna pro Zbozi.cz.
Přístupy jsem Vám již zasílal na email. (10.12. 12:08)
@novetrendy: Soubor se nestihl vygenerovat, je tam více než 8000 produktů + variant, takže se musel cron spustit 8-krát (po 3 minutách). A ten web je patrně testovací a nemá žádnou návštěvnost, takže se asi tolikrát nespustil. Jakmile jsem ho navštívil, tak se to automaticky dokončilo.
@pavelevap: Ano web je před spuštěním, takže nemá žádnou návštěvnost. Díky za info!
Stává se to pouze při prvním spuštění skriptu, potom už bude feed přepisován až v případě, kdy bude zcela hotov (aby se na něj nečekalo). Vše probíhá v souboru heureka-tmp.xml
a teprve když je vše hotovo, tak se změní název.
Paráda, dobrá práce :+1:
Doplnil jsem vlastnosti a varianty pro Zbozi.cz: https://github.com/pavelevap/ceske-sluzby/commit/53bfd7c02de27925e253f958190b6b01fe1b767d
Docela mě překvapilo, že se nový feed pro Zbozi.cz mnohem více podobá Heurece, takže už tam nejsou skoro žádné rozdíly (nebo jsem si jich zatím nevšiml). Celý skript byl původně připravován jen na jednoduché (a odlišné) XML feedy a nyní jsme se už dostali do fáze, kdy to bude potřeba celé přepsat a generalizovat do jednoduchých funkcí nebo se v tom utopíme :-)
Prosím vyzkoušejte (patrně tam budou nějaké chybky, na svých eshopech varianty nepoužívám), bude to asi zase chvíli trvat, pro urychlení je možné deaktivovat a znovu aktivovat XML feed pro Zbozi.cz v nastavení WooCommerce.
@pavelevap To jste mi udělal radost! Vyzkouším, dám vědět. BTW:Zkouším přidat CAF do pluginu České služby, ale nějak se mi nedaří. Až budu mít nějaký úspěch, pošlu Vám verzi na otestování, s tím gitem si zatím bohužel nějak moc netykám :-1: Budu si muset najít čas na nastudování.
Zkoušel někdo varianty v XML? Jsou s tím nějaké problémy?