V tomto příspěvku se dozvíme:
- Jak pravidla obecně pracují s vícenásobnými elementy?
- Přidávání hodnot strukturově
- Kterých pravidel se to týká?
- Příklady
- Shrnutí
Úvod
Stalo se vám někdy, že jste omylem přepsali hodnoty všech parametrů, když jste v pravidle Přepsat napsali jako cestu např. PARAM | VAL
? Nebo že jste omylem přepsali všechny hodnoty všech obrázkových URL?
Oba případy mají společné to, že se staly omylem a že se přepsaly všechny hodnoty nějakého elementu. V tomto příspěvku si povíme, jak se to stalo a jak správně pracovat s vícenásobnými elementy v rámci pravidel.
Jak pravidla pracují s vícenásobností
Čtení z elementů a proměnných
V některých pravidlech se dá pracovat s elementy a proměnnými pomocí znaku procenta %:
Jestliže je mezi procenty uvedena cesta k jednoduchému elementu nebo proměnná, která má jako vstupní element zvolený jednoduchý element, tj. čte se jen z jedné hodnoty, není co řešit a pracuje se jen s danou hodnotou. Např. element ITEM_ID bývá většinou unikátní v rámci jednoho produktu: %ITEM_ID%
.
Ale co když je mezi procenty uveden vícenásobný element (takže má více jak jednu hodnotu v rámci jednoho produktu)? Jak má pravidlo vědět, s jakou hodnotou má pracovat? Např. u parametrů bývá časté, že jich je více v rámci jednoho produktu. Jako příklad můžeme použít příklad z úvodu:
Produkt má 2 parametry. A když napíšeme %PARAM | VAL%
, tak zadané cestě vyhovují 2 hodnoty, konkrétně hodnoty “černá” a “XXL”, jelikož element PARAM je vícenásobný.
Nemáme tedy už jen jednu hodnotu, ale dvě. A se kterou chceme pracovat – s první, nebo druhou? To pravidlo samo nezjistí, proto je výchozí chování pravidel nastaveno tak, že pokud pravidla čtou z více hodnot, vezmou si první hodnotu a dále pracují jenom s ní. Pokud víme konkrétně, se kterou hodnotou chceme pracovat, musíme to pravidlu sdělit – k upřesnění cesty k elementu slouží podmínky.
Např. kdybychom chtěli vzít pouze hodnotu parametru Velikost, napíšeme následující cestu:
Takhle pravidlo bude číst pouze z takových parametrů, které mají v elementu PARAM_NAME hodnotu “Velikost”. Ale pozor na případy, kdy má produkt více stejných parametrů, např. Barva.
Opět se čte ze všech parametrů, které vyhovují cestě, takže pro cestu PARAM { PARAM_NAME = "Barva" } | VAL
se čtou hodnoty “černá” i “modrá” a vezme se z nich první hodnota: “černá”.
Zapisování do elementů
V předchozí sekci jsme si vyjasnili, jak pravidla čtou z elementů – vezmou si pouze jejich první hodnotu. Ale jak je to se zapisováním do elementů?
Opět, pokud je v poli uvedena cesta k jednoduchému elementu, je vše jasné. Zapíšeme hodnotu (kterou si pravidlo přečetlo, vzalo si ji a pracuje s ní) do jediné hodnoty daného elementu.
Ale když bude v poli uvedena cesta k vícenásobnému elementu, do které hodnoty daného vícenásobného elementu má pravidlo zapisovat? To pravidlo samo neví. A proto je výchozí chování pravidel nastaveno tak, že pokud pravidla zapisují do vícenásobného elementu, zapisují do všech jeho hodnot.
Pokud chceme zapisovat do konkrétní hodnoty, musíme to pravidlu sdělit – jak už víme, k upřesnění cesty k elementu slouží podmínky. Např. kdybychom chtěli zapisovat pouze do hodnoty parametru Barva (příklad z úvodu), stačí cestu upřesnit právě na PARAM_NAME s hodnotou Barva:
Takhle pravidlo zapíše pouze do takových parametrů, které mají v elementu PARAM_NAME hodnotu “Barva” (ale pozor – do všech takových parametrů zapíše hodnotu “zelená”).
Mergado 1 nepracovalo s vícenásobností elementů, takže ani pravidla nepracovala s vícenásobností elementů a popisované chování pravidel ohledně čtení a zapisování hodnot tedy bylo v MERGADU 1 irelevantní.
Přidávání hodnot strukturově
Při zapisování do elementů se dá využít ještě jednoho obecného chování pravidel: Při zapisování do elementů - vše, co je uvedeno v podmínce a je s operátorem = či spojovacím operátorem AND, bude vytvořeno taktéž.
Takže například: Chceme-li u formátu Shoptet přidat flag action (aktuálně neexistující), použijeme pravidlo Přepsat, ve kterém do pole pro element zadáme cestu:
FLAGS | FLAG { CODE = "action" } | ACTIVE
Tímto se nám přidá flag action a zároveň k němu i hodnota 0.
Příklad: Tímto způsobem můžeme přidat i další variantu, jen cesta bude o dost delší, jelikož varianty mají mnoho zanořených elementů:
VARIANTS | VARIANT { CODE = "ZI1/41" AND EAN = "6655849785123" AND NEGATIVE_AMOUNT = "0" AND AVAILABILITY_IN_STOCK = "Skladem" AND UNIT = "ks" AND PARAMETERS | PARAMETER { NAME = "Velikost" } | VALUE = "EU 41" AND DECIMAL_COUNT = "0" AND AVAILABILITY_OUT_OF_STOCK = "Vyprodáno" AND FREE_BILLING = "0" AND APPLY_DISCOUNT_COUPON = "1" AND STOCK | WAREHOUSES | WAREHOUSE { NAME = "Brno" } | VALUE = "0" AND STOCK | WAREHOUSES | WAREHOUSE { NAME = "Praha" } | VALUE = "0" AND FREE_SHIPPING = "0" AND APPLY_QUANTITY_DISCOUNT = "1" AND STANDARD_PRICE = "4500" AND @id = "7575" AND APPLY_VOLUME_DISCOUNT = "1" AND ZBOZI_HIDDEN = "0" AND APPLY_LOYALTY_DISCOUNT = "1" AND PRICE_VAT = "2360" AND HEUREKA_CART_HIDDEN = "0" AND VAT = "21"AND HEUREKA_HIDDEN = "0" AND CURRENCY = "CZK" AND MIN_PRICE_RATIO = "0" AND FIRMY_CZ = "1" AND PRICE_RATIO = "1" AND IMAGE_REF = "imgurl" } | VISIBLE
Seznam pravidel, která čtou nebo zapisují
Uvádíme seznam pravidel, kterých se týká výše popisované chování čtení a zapisování:
Pravidlo | Umí číst | Zapisuje |
---|---|---|
Přepsat | ![]() |
![]() |
Najít a nahradit | ![]() |
![]() |
Hromadné přepisování dle výběrů | ![]() |
![]() |
Hromadné přepisování dle hodnot | ![]() |
![]() |
Hromadné zkopírování hodnot | ![]() |
![]() |
Nastavit parametry produktů | ![]() |
![]() |
Nastavení ceny dopravy | ![]() |
![]() |
Nastavit UTM parametry | ![]() |
![]() |
Výpočet | ![]() |
![]() |
Import datového souboru | ![]() |
![]() |
Varování
V případě, že při aplikaci pravidel opravdu nastane situace, kdy zadaná cesta vede k více hodnotám, Mergado Editor uživatele upozorní pomocí varování. Varování nám mohou sdělit, že jsme někde udělali chybu nebo že máme v pravidle třeba zbytečně velký výběr. Přečtěte si podrobnější příspěvek věnovaný jenom varováním.
Vytvářením lepších výběrů dosáhneme rychlejšího přegenerování.
Příklad
Ukažme si jeden příklad: akorát budeme jednou postupovat správně a podruhé špatně.
Příklad: správně
Mějme následující data:
Řekněme, že bychom chtěli mít stejnou barvu v informačním parametru jako v parametru TEXT_PROPERTY. Vytvoříme si proto pravidlo Přepsat, které bude číst z TEXT_PROPERTIES | TEXT_PROPERTY { NAME = "Barva" } | VALUE
a zapisovat bude do INFORMATION_PARAMETERS | INFORMATION_PARAMETER { NAME = "Barva" } | VALUE
:
Po přegenerování obdržíme:
Pravidlo tedy přečetlo jednu hodnotu “černá” a zapsalo ji do jedné hodnoty “modrá”.
Příklad: špatně
Mějme stejná data, stejný úkol (dostat hodnotu “černá” do hodnoty “modrá”) a k tomu i další úkol: dostat hodnotu “XXL” do hodnoty “M”. Takže vlastně chceme dostat všechny hodnoty parametru TEXT_PROPERTY do informačního parametru. Vytvoříme si proto pravidlo Přepsat následovně:
Po přegenerování obdržíme:
A k tomu jedno varování
které nám říká, že bylo nalezeno více hodnot pro cestu TEXT_PROPERTIES | TEXT_PROPERTY | VALUE
. A vskutku, cesta odkazuje na celkem 2 hodnoty:
Takže bychom cestu mohli upřesnit – stejně jako v příkladu správně, tj. TEXT_PROPERTIES | TEXT_PROPERTY { NAME = "Barva" } | VALUE
. Zároveň bychom taky měli upřesnit cestu k elementu, kam pravidlo zapisuje (opět viz příklad správně), jelikož aktuálně zapisuje do všech hodnot daného elementu.
Protože chceme dostat i hodnotu “XXL” do hodnoty “M”, vytvoříme si další pravidlo Přepsat a vyplníme ho podobně jako první pravidlo jen s použitím Velikost:
Po přegenerování takto dvou vytvořených pravidel Přepsat se nám už hodnoty dostanou správně k příslušným hodnotám.
Pro dosažení obou úkolů je možné použít i pravidlo Hromadné zkopírování hodnot.
Shrnutí
- Jak pravidla obecně pracují s vícenásobnými elementy?
- Pravidla čtou z první nalezené hodnoty a zapisují do všech hodnot vícenásobného elementu vyhovující cestě. Pokud chceme upřesnit zadanou cestu, použijeme podmínky.
- Pro jednoduché elementy platí to stejné: pravidla čtou z první (jediné) hodnoty elementu a zapisují do všech (opět jediné) hodnoty elementu. Upřesňování cesty v případě jednoduchých elementů postrádá smysl.
- Přidávání hodnot strukturově
Při zapisování do elementů - vše, co je uvedeno v podmínce a je s operátorem = či spojovacím operátorem AND, bude vytvořeno taktéž.
- Kterých pravidel se to týká?
Přepsat, Najít a nahradit, Hromadné přepisování dle výběrů, Hromadné přepisování dle hodnot, Hromadné zkopírování hodnot, Nastavit parametry produktů, Nastavení ceny dopravy, Nastavit UTM parametry, Výpočet a Import datového souboru
- Příklady
Pro správné a efektivní používání Mergado Editoru musíme pravidla aplikovat pouze na existující hodnoty a elementy (vyhovující podmínkám v cestách). V opačném případě nás Editor varuje a my si pak budeme muset upravit cesty k elementům nebo výběry.