ceske-sluzby icon indicating copy to clipboard operation
ceske-sluzby copied to clipboard

XML feedy - podpora variant

Open pavelevap opened this issue 9 years ago • 52 comments

Pro některé eshopy je důležité generovat do XML i jednotlivé varianty.

pavelevap avatar Oct 20 '15 10:10 pavelevap

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

novetrendy avatar Oct 20 '15 11:10 novetrendy

Kód přesunut: #22

novetrendy avatar Oct 20 '15 11:10 novetrendy

Zdrojový kód jsem přesunul do nového požadavku (nesouvisí s podporou variant).

pavelevap avatar Oct 20 '15 20:10 pavelevap

Prosím, co můžu udělat pro urychlení variant do feedu.

novetrendy avatar Oct 22 '15 19:10 novetrendy

@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?

pavelevap avatar Oct 29 '15 12:10 pavelevap

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.

pavelevap avatar Oct 29 '15 20:10 pavelevap

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.

novetrendy avatar Nov 13 '15 18:11 novetrendy

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();
}

alesmenzel avatar Nov 25 '15 18:11 alesmenzel

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?

pavelevap avatar Dec 05 '15 12:12 pavelevap

PRODUCTNAME bych vzal title z nadřazeného produktu + vlastnosti varianty. Př: Samolepka Dekor TATRA 576 - Vnitřní - Červená - 17x25cm

novetrendy avatar Dec 05 '15 13:12 novetrendy

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

pavelevap avatar Dec 06 '15 20:12 pavelevap

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é :-)

pavelevap avatar Dec 07 '15 20:12 pavelevap

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 avatar Dec 10 '15 10:12 novetrendy

@novetrendy: Ano, zatím to má na zkoušku pouze Heureka. Objevuje se nějaká chyba? Pošlete prosím přístupy...

pavelevap avatar Dec 10 '15 11:12 pavelevap

CHYBA: Neplatná šablona pro RSS zdroj. Přístupy jsem poslal na email.

novetrendy avatar Dec 10 '15 11:12 novetrendy

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

pavelevap avatar Dec 13 '15 12:12 pavelevap

Zítra hned vyzkouším a dám vědět!

novetrendy avatar Dec 14 '15 09:12 novetrendy

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 avatar Dec 16 '15 14:12 novetrendy

@novetrendy: Díky, jak to nakonec dopadlo s vygenerovaným souborem? A co na to Heureka?

pavelevap avatar Dec 18 '15 10:12 pavelevap

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.

novetrendy avatar Dec 18 '15 17:12 novetrendy

Tak bohužel soubor heureka.xml se nevytvoří, pouze heureka-tmp.xml

novetrendy avatar Dec 22 '15 09:12 novetrendy

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

pavelevap avatar Dec 22 '15 10:12 pavelevap

Přístupy jsem Vám již zasílal na email. (10.12. 12:08)

novetrendy avatar Dec 22 '15 10:12 novetrendy

@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 avatar Dec 22 '15 11:12 pavelevap

@pavelevap: Ano web je před spuštěním, takže nemá žádnou návštěvnost. Díky za info!

novetrendy avatar Dec 22 '15 11:12 novetrendy

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.

pavelevap avatar Dec 22 '15 13:12 pavelevap

Paráda, dobrá práce :+1:

novetrendy avatar Dec 22 '15 13:12 novetrendy

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 avatar Dec 22 '15 16:12 pavelevap

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

novetrendy avatar Dec 22 '15 16:12 novetrendy

Zkoušel někdo varianty v XML? Jsou s tím nějaké problémy?

pavelevap avatar Jan 11 '16 17:01 pavelevap