Vícenásobné elementy v pravidlech

V tomto příspěvku se dozvíme:

Ú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á”).

:information_source:  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í:

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.

:bulb: 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.

:information_source:  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.