🐮 Jak vytvořit položky zboží z variant v jednom elementu

Za tenhle návod mne naši vývojáři asi nepochválí. Pracovní postup mi přijde málo efektivní. Je to ale situace, kterou už jsem v praxi viděl. A bylo třeba ji řešit. Následující řádky tedy berte prosím víc jako inspiraci než jako doslovný návod.

Problém

Zboží má varianty. Za příklad si vezmeme obuv. Varianty jsou zapsány do jednoho elementu jako čísla.

<item>
  <id>123</id>
  <title>Nike Air Huarache Light trainers - Blue</title>
  <price>456</price>
  <size>10-11-13</size>
</item>

Elementů s informacemi bylo v praxi více. Ty pro náš příklad nepotřebujeme. Když na příklad koukám nyní, přijde mi zvláštní, že mají všechny varianty stejnou cenu - prostě měly. To hlavní je v elementu size. Všimněte si, že element obsahuje tři velikosti oddělené pomlčkou. Mergado toto zpracuje jako jednu shopitem, která má v elementu size hodnotu 10-11-13. Našim cílem bude ovšem vytvořit tři shopitems, které v elementu size budou mít hodnoty: 10, 11 a 13.

Pro náš příklad uvedu postup, který vytvoří pouze samostatné shopitems. Kdybych chtěl postup řešit lépe, mohl bych zkusit vymyslet např. zápis, že jednotlivé shopitems jsou k sobě variantami (zápis ID varianty do vhodného elementu), a jistě bych vymyslel i další vylepšení.

Řešení

1) Naformátování dat do “tabulky”

Nejprve si data připravím. Viz. návod k pravidlu naformátovat XML do tabulky.

2) Zpracování dat

Pomocí pravidla najít a nahradit zpracuji data takto:

Najít text:

<item>(?P<BEFORE>.*?)<size>([0-9]*)\-?([0-9]*)\-?([0-9]*)\-?([0-9]*)\-?([0-9]*)<\/size>(?P<AFTER>.*?)<\/item>

Regulární výraz: ANO

Nahradit za:

<item>\g<BEFORE><size>\g<2></size>\g<AFTER></item>
<item>\g<BEFORE><size>\g<3></size>\g<AFTER></item>
<item>\g<BEFORE><size>\g<4></size>\g<AFTER></item>
<item>\g<BEFORE><size>\g<5></size>\g<AFTER></item>
<item>\g<BEFORE><size>\g<6></size>\g<AFTER></item>

Předpokládám, že variant bude v jedné shopitem maximálně 6. Minimálně jedna. Varianty budou odděleny pomlčkou. Text celé jedné položky (item) tedy rozdělím na proměnné: jakýkoliv text (?P<BEFORE>.*?) zpracování velikostí ([0-9]*)\-?([0-9]*)\-?([0-9]*)\-?([0-9]*)\-?([0-9]*) jakýkoliv text za elementem s variantami (?P<AFTER>.*?). Tyto proměnné následně zapíši do samostatných items. V zápisu používám pojmenování proměnných.

3) Odstranění položek bez variant

Předchozí pravidlo vygeneruje vždy 6 nových items. Pokud má položka variant méně, např. 2, vygeneruje pravidlo 2 položky s variantami a zbývající 4 bez varianty (vygenerované navíc). Tyto potřebujeme odstranit. Použijeme pravidlo Smazat text.

<item>.*<size><\/size>.*</item>

Regulární výraz: ANO

4) Odstranění prázdných řádků, vyčištění datového souboru

Mne při zpracování zlobily prázdné řádky. Dodatečně jsem je odstranil pravidlem Odstranit prázdné řádky. Podobně lze data vyčistit i od jiných nežádoucích znaků.

A to je celé. Celý postup je vlastně docela jednoduchý. Hlavní logika spočívá ve dvou pravidlech, kdy jedno vygeneruje varianty a druhé smaže nadbytečné položky bez variant.

Náhled pravidel zpracování datového souboru.

K čemu je to dobré

Uvedeným příkladem jsem chtěl říci, že je možné jednu položku zboží, do které jsou zapsány varianty nevalidním způsobem, pomocí Blending Bullu převést na zápis, který z každé varianty udělá vlastní položku zboží.

Osobně nejsem spokojen s efektivitou, kdy vytvářím z jedné položky vždy šest nových a ty zbytečné v dalším kroku smažu. Třeba někdo z vás vymyslí efektivnější postup. Každopádně tento postup funguje a může pomoci :wink:

1 Like