V tomto příspěvku se dozvíme:
K čemu se používá?
Základním principem pravidla je, že v Mergado Editoru se vezmou hodnoty z vybraného zdrojového elementu a zkopírují se do vybraného cílového elementu. Výhodou je, že to jde udělat hromadně pro více elementů v rámci jednoho pravidla.
Jak funguje pravidlo Hromadné zkopírování hodnot?
V této sekci si popíšeme, jak pravidlo funguje, co všechno dokáže a na co si dát pozor.
Základní princip
Pravidlo funguje intuitivně. Vezměme si příkladový XML feed, kde výstup vypadá takto:
Chybí v něm element IMGURL obsahující URL obrázku, protože jsme na vstupu použili nestandardní element OBRAZEK1. My ale zde URL obrázku chceme mít. Použijeme tedy pravidlo Hromadné zkopírování hodnot, kde jako zdrojový element vybereme OBRAZEK1 a jako cílový element vybereme IMGURL.
Po přegenerování se nám na výstupu nově objeví element IMGURL s námi požadovaným URL obrázku.
Na pořadí řádků záleží
V pravidle záleží na pořadí řádků. Hodnoty se kopírují postupně po řádcích. Nejprve se provede zkopírování hodnoty na prvním řádku, potom hodnoty na druhém řádku atd. Znamená to, že v případě více řádků se na pozdějším řádku dá pracovat s už zkopírovanou hodnotou dřívějšího řádku. Vysvětleme si to na příkladu:
V příkladu se na druhém řádku zkopíruje hodnota elementu PRICE_VAT do elementu PRICE. Element PRICE tedy nově obsahuje původní hodnotu elementu PRICE_VAT. Až po tomto zkopírování na druhém řádku se provede na třetím řádku zkopírování hodnoty elementu CENA do elementu PRICE_VAT. Takže element PRICE_VAT obsahuje nově hodnotu elementu CENA.
Kdybychom v příkladu prohodili pořadí druhého a třetího řádku, dostaneme:
kde nejprve na druhém řádku zkopírujeme hodnotu elementu CENA do elementu PRICE_VAT a pak na třetím řádku zkopírujeme novou hodnotu elementu PRICE_VAT do elementu PRICE. Rozdíl oproti příkladu před prohozením řádků je ten, že v tomto příkladu element PRICE obsahuje ve výsledku hodnotu elementu CENA.
Je potřeba uvést přesnou cestu k elementu
Tato sekce se netýká MERGADA 1, jelikož MERGADO 1 nepracovalo s XML strukturou jako MERGADO 2.
Co kdybychom měli na výstupu formát Shoptet kompletní, který má URL obrázků standardně v elementu IMAGE, a chtěli bychom do něj zkopírovat hodnoty z elementu OBRAZEK1? Jelikož je potřeba vždy uvést celou a přesnou cestu k elementu – konkrétně element IMAGE musí být zanořený pod elementem IMAGES, což nám napoví i dropdown:
Pravidlo bude správně vypadat následovně:
Tedy nestačí napsat samotný element IMAGE.
Jak pravidlo funguje u vícenásobných elementů
Tato sekce se netýká MERGADA 1, jelikož MERGADO 1 nepracuje s vícenásobností elementů jako MERGADO 2.
V případě jednoduchých elementů není co řešit. Vezme se jediná hodnota zdrojového elementu a zkopíruje se do cílového elementu a nahradí tak jeho jedinou původní hodnotu.
V případě vícenásobných elementů je chování trochu složitější. Vezmou se všechny hodnoty zdrojového elementu a zkopírují se do cílového elementu tak, že se začne od první pozice vyhovující cestě cílového elementu. Po zkopírování se zbytek původních hodnot cílového elementu smaže.
Popišme si to detailněji na příkladu s obrázky. Mějme následující data:
a pravidlo Hromadné zkopírování hodnot napsané následovně:
Pravidlo provede postupně tyto 3 kroky:
-
Krok 1: Vezmou se všechny hodnoty zdrojového elementu vyhovující zadané cestě.
-
Krok 2: U cílového elementu se najde první hodnota vyhovující zadané cestě.
-
Krok 3: Hodnoty z kroku 1 se zkopírují do cílového elementu. A zkopírují se tak, že se začíná od první pozice vybrané v kroku 2. Po zkopírování se zbytek původních hodnot cílového elementu smaže.
Po přegenerování tedy feed vypadá nově takto:
Musíme být opatrní, abychom si třeba nechtěně nesmazali některé hodnoty cílového elementu.
Jak upřesnit cestu k elementu?
Cílová cesta k elementu může obsahovat i upřesňující podmínky. Například kdybychom v našem příkladu chtěli, aby kopírování probíhalo až od druhé hodnoty, napsali bychom místo obecného IMGURL_ALTERNATIVE
přesnější IMGURL_ALTERNATIVE { @@POSITION = 2 }
.
Kopírování celé struktury
Tato sekce se netýká MERGADA 1, jelikož MERGADO 1 nepracovalo s XML strukturou jako MERGADO 2.
Představme si parametry, které mají názvy v elementu PARAM_NAME, hodnoty v elementu VAL a oba tyto elementy jsou pro každý parametr zanořené v elementu PARAM.
Tyto parametry chceme zkopírovat do elementů INFORMATION PARAMETER, NAME a VALUE.
Jak toho dosáhnout? Mohlo by nás napadnout, že tedy chceme hodnoty elementu PARAM_NAME zkopírovat do elementu NAME a hodnoty elementu VAL do elementu VALUE. Tak do pravidla stačí napsat:
Ale po přegenerování člověk zjistí, že se hodnoty zkopírovaly podivně – všechny hodnoty jsou v jednom parametru.
0
Což ale vlastně odpovídá chování popsanému v předchozí sekci Jak pravidlo funguje u vícenásobných elementů:
-
Vezmou se všechny hodnoty zdrojového elementu vyhovující zadané cestě, tedy všechny názvy a hodnoty parametrů.
-
U cílového elementu se najde první pozice zadané cesty. Což v našem případě je první pozice elementu NAME a VALUE (a nikoliv první pozice elementu INFORMATION_PARAMETER, jak by někoho mohlo napadnout).
-
Hodnoty z bodu 1 se zkopírují do cílového elementu od pozice vybrané v bodu 2, tj. všechny hodnoty z elementů PARAM_NAME a VAL se zkopírují do elementů NAME A VALUE, ale v rámci jednoho elementu INFORMATION_PARAMETER.
Tohle tedy není ta správná cesta. Pomůžeme si proto speciálním chováním pravidla: pravidlo Hromadné zkopírování hodnot kopíruje hodnoty a bere přitom ohled na strukturu elementů v případě, že se ve formuláři přes více řádků objeví daná struktura elementů (rodič – potomek). Tedy v našem případě, jestli chceme zkopírovat hodnoty elementů PARAM_NAME a VAL strukturově do elementů NAME A VALUE, stačí napsat do formuláře do řádku nad ně i jejich příslušné rodičovské elementy (resp. celou cestu) - PARAM a INFORMATION_PARAMETERS | INFORMATION_PARAMETER.
a hodnoty se zkopírují tak, jak chceme.
Jako pomůcku můžete použít samotný XML feed nebo stránku Elementy. V obou případech se ukazuje struktura elementů.
Co kdybychom chtěli strukturově zkopírovat jen některé vybrané parametry, např. velikost a délka? I to je možné, stačí upřesnit cestu k elementu pomocí podmínky. Podmínku je potřeba uvést u všech elementů (rodičů i potomků), u kterých chceme kopírovat strukturově. Pro náš příklad:
Stejná podmínka pro rodičovský element musí být zapsána i v zanořených elementech:
Poté dopíšeme, které zanořené elementy chceme strukturově kopírovat:
Strukturové kopírování proběhne pouze v případě, kdy (vertikálně) sousedící řádky obsahují stejný rodičovský element. Ve všech ostatních případech se pravidlo bude chovat tak, jak popisujeme v předchozí sekci Jak pravidlo funguje u vícenásobných elementů.
Co dále nabízí formulář pravidla Hromadné zkopírování hodnot?
Formulář pravidla nabízí několik funkcí, které nám ulehčí práci:
-
Tlačítko vyplní levou stranu všemi elementy ze stránky Elementy. Ulehčí nám tedy práci v případě, že se chystáme kopírovat hodnoty z většího množství elementů.
-
Tlačítko stáhne CSV soubor s vyplněnými poli. Bude obsahovat 2 sloupce a odpovídající počet vyplněných řádků.
![|624x608] -
Popisný text Řádky bez hodnot budou ignorované nám sděluje, že řádky s prázdnými poli (na levé či pravé straně) se při uložení pravidla smažou. Tohoto můžeme využít v kombinaci s tlačítkem Předvyplnit levou stranu, kdy si vyplníme celou levou stranu a pak vyplníme pravou stranu jen k některým řádkům a o zbytek se nemusíme starat, protože se při uložení smaže.
-
Tlačítko pro smazání daného řádku.
Srovnání s ostatními pravidly
Proč bychom měli používat pravidlo Hromadné zkopírování hodnot, když v některých případech, např. pro zkopírování hodnoty jednoho elementu do jednoho jiného elementu, stačí použít pravidlo Přepsat?
Pravidlo Hromadné zkopírování hodnot je efektivnější pro případy, kdy chceme zkopírovat hodnoty ze 2 a více elementů nebo do 2 a více elementů. Přeci jen nechceme mít 10 pravidel Přepsat a zbytečně si zpomalovat přegenerování našeho projektu, když jde to samé jednoduše udělat v jednom pravidle. Naopak pravidlo Přepsat je vhodné pro kopírování jen v jednom případě, a to v případě zkopírování hodnoty pouze jednoho elementu do pouze jednoho jiného elementu.
Nejčastější použití
Nabízíme výčet příkladů použití pravidla Hromadného zkopírování hodnot, se kterými se setkáváme nejčastěji, abychom si vyjasnili, k čemu všemu ho lze zhruba použít.
Převodník formátů nepřevedl všechny hodnoty námi požadovaným způsobem
Chceme tedy převod hodnot dodělat nebo upravit sami. Tento případ se týká většinou projektů, kde je zvolen vlastní formát nebo formát mající nestandardní elementy, ke kterým nemáme ekvivalent ve formátu Mergado XML.
Příklad 1: Hodnoty elementu code (Shoptet CSV) chceme zkopírovat do elementu PartNumber (Alza.cz - Dropshipment). Jedná se o typický příklad. Ve formuláři pravidla vybereme na levé straně element code a na pravé straně cestu k elementu Product | PartNumber
.
Hotovo! Formulář uložíme, projekt přegenerujeme a změny se projeví na výstupu.
Příklad 2: Hodnoty vícenásobného elementu Kategorie (vlastní formát) chceme zkopírovat do elementů CATEGORY a DEFAULT_CATEGORY (Shoptet kompletní). Konkrétně první hodnotu z elementu Kategorie chceme v elementu DEFAULT_CATEGORY a zároveň všechny hodnoty Kategorie chceme v CATEGORY.
Tj. máme na vstupu:
a na výstupu chceme dostat:
Pravidlo bude vypadat takto:
Příklad 3: Parametry PARAM, PARAM_NAME a VAL (Heureka) chceme zkopírovat do parametrů INFORMATION_PARAMETERS, INFORMATION_PARAMETER, NAME a VALUE (Shoptet kompletní).
→
Využijeme toho, že pravidlo umí kopírovat strukturově, a ulehčíme si tak práci. Pravidlo bude vypadat takto:
Máme zvolený formát Plain CSV na výstupu, který použijeme jako soubor v pravidle Import datového souboru v jiném projektu.
Příklad 4: Tomuto příkladu věnujeme samostatný článek Chceme dostat informace o skladové dostupnosti Heureka dostupnostního feedu do Heureka produktového feedu.
Příklad 5: Na vstupu máme formát Heureka a chceme dostat hodnoty ze zanořených elementů pod DELIVERY, např. DELIVERY | DELIVERY_ID
, do nezanořených elementů, např. DELIVERY_ID.
Pravidlo bude vypadat takto:
Prohození hodnot dvou elementů
Příklad 6: Chceme prohodit hodnoty mezi dvěma elementy, např. IMGURL a IMGURL_ALTERNATIVE.
K tomu je nejdříve potřeba, abychom si vytvořili pomocný element (na stránce Elementy).
Pak už jen stačí vytvořit pravidlo takto:
anebo následovně:
Obě varianty pravidla fungují stejně.
Na prohození hodnot také existuje veřejně dostupné makro, které se dá jednoduše použít.
Shrnutí
- Jak pravidlo funguje?
- Pravidlo vezme hodnoty z vybraného zdrojového elementu a zkopíruje je do vybraného cílového elementu. Tohle jde udělat hromadně pro více elementů v rámci jednoho pravidla.
- V případě vícenásobných elementů se vezmou všechny hodnoty zdrojového elementu a zkopírují se do cílového elementu tak, že se začne od první pozice vyhovující cestě cílového elementu. Po zkopírování se zbytek původních hodnot cílového elementu smaže.
- Jak kopírovat strukturu?
- Chceme-li element kopírovat strukturově, uvedeme nad něj i jeho rodičovský element:
- Chceme-li element kopírovat strukturově, uvedeme nad něj i jeho rodičovský element:
- Nejčastější použití, například:
- Převodník formátů nepřevedl všechny hodnoty námi požadovaným způsobem.
- Máme zvolený formát Plain CSV na výstupu, který použijeme jako soubor v pravidle Import datového souboru v jiném projektu.
- Prohození hodnot dvou elementů.