Podmínky (v cestě k elementu)

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

Co jsou podmínky?

Podmínky v cestě k nějakému elementu jsou filtrem, který nám v rámci dané cesty umožňuje filtrovat hodnoty a jejich elementy. Zapisují se do složených závorek { } a vážou se k elementu, jenž se vyskytuje nalevo od nich. V podmínkách se dá filtrovat pouze přes elementy zanořené v elementu, na který se podmínky vážou.

Několik ukázek, na které jste možná někdy narazili:

  1. jednotka-ep
  2. text
  3. trojka-ep

:information_source:  Složené závorky { } se na české a slovenské klávesnici píší následovně: levá závorka pomocí pravého Alt + B nebo Option + í (Mac) a pravá závorka pomocí pravého Alt + N nebo Option + é (Mac).
Na anglické klávesnici se píší takto: levá závorka pomocí Shift + [ a pravá závorka pomocí Shift + ].

Vysvětleme si podmínky na příkladu. Mějme následující data:

stvorka-ep

…tedy se strukturou elementů takovou, že element PARAM je rodič a elementy PARAM_NAME a VAL jsou jeho potomci. A mějme cestu z prvního obrázku v úvodu: PARAM { PARAM_NAME = "Barva" } | VAL. V této cestě je podmínkou { PARAM_NAME = "Barva" }. Tato podmínka se váže na rodičovský element PARAM a upřesňuje se přes zanořený element PARAM_NAME (který je zároveň potomkem elementu PARAM).

patka-ep

Tato cesta s podmínkou se čte postupně zleva doprava takto:
Vezmeme element PARAM, jehož pod ním zanořený element PARAM_NAME má hodnotu rovnající se Barva, a v takovém elementu PARAM zacílíme na jeho potomka VAL.

sestka_ep

A když postup rozdělíme do jednotlivých kroků, tak to vypadá takto:

  1. Vezmeme rodičovský (a vícenásobný) element PARAM…
    postup čtení cestou: image

sedmicka-ep

  1. …jehož zanořený element PARAM_NAME má hodnotu Barva…
    postup čtení cestou: image

osmicka-epp

  1. …a v takovém elementu PARAM zacílíme na (vícenásobný) element VAL.
    postup čtení cestou: image

deviatka-ep

Cesta PARAM { PARAM_NAME = "Barva" } | VAL nám tedy vyfiltruje a zacílí jen takové elementy VAL, které mají za sourozence elementy PARAM_NAME s hodnotou Barva.

K čemu jsou podmínky?

desiatka_ep

Jak už jsme zmínili dříve, podmínky v cestě k elementu jsou filtrem. Podmínky zpřesňují zadanou cestu a umožňují tak zacílit na konkrétnější podskupinu hodnot daného elementu.

Uveďme si příklad:
Mějme produkt s parametry Velikost, Barva, Materiál a Pohlaví. Řekněme, že chceme přepsat Velikost z původní hodnoty “XXL” na hodnotu “M”. Jak to uděláme? Víme, že na hodnoty parametrů zacílíme pomocí cesty PARAM | VAL, což je cesta bez podmínky:

jedenastka-ep

No jo, ale my chceme přepsat (zacílit na) pouze hodnotu “XXL” u parametru Velikost. K tomu nám pomohou podmínky! Cesta s podmínkou pak vypadá takto:

PARAM { PARAM_NAME = "Velikost" } | VAL

dvanastka-ep

Podmínky se vyplatí používat jenom u vícenásobných elementů. U jednoduchých elementů se podmínky taky dají použít, ale postrádá to smysl z podstaty jednoduchosti elementů – takové elementy mají pouze jednu hodnotu, není tedy důvod (a ani není z čeho) je filtrovat.

:information_source:  V MERGADU 1 podmínky neexistovaly a nedalo se s nimi pracovat, jelikož v této verzi neexistovala ani žádná vícenásobnost nebo struktura elementů.

Správný zápis podmínky

Mějme cestu PARAM { PARAM_NAME = "Barva" } | VAL. Základní šablona pro psaní podmínky je:

trinástka-ep

:bulb: Mezery jsou důležité a nelze je vynechat! Jak mezery v samotné podmínce, tak mezery nacházející se před a po podmínce.

Obsah podmínky připomíná dotazy z formuláře pro vlastní MQL dotaz. Ze stejného místa je i první obrázek z úvodu.

strnastka-ep

A není to náhoda. Do podmínek totiž můžeme psát úplně všechno, co do MQL dotazu. Tím se nám otevírá svět neskutečných možností. Třeba MQL dotaz na hodnoty variantních parametrů Velikost a Materiál

jde dosadit do podmínky cesty, která cílí na název skladu

VARIANTS | VARIANT { PARAMETERS | PARAMETER { NAME = "Velikost" } | VALUE = "M" AND PARAMETERS | PARAMETER { NAME = "Materiál" } | VALUE = "Bavlna" } | STOCK | WAREHOUSES | WAREHOUSE | NAME

Definováním podmínky se vyfiltrují pouze takové varianty, jejichž hodnota parametru Velikost je M a zároveň hodnota parametru Materiál je Bavlna. Na tomto příkladu vidíme, že v jedné podmínce mohou být i další podmínky a operátory a že můžeme pracovat s elementy libovolně zanořenými.

:information_source:  Existují podmínky v cestě k elementu a podmínky v MQL. Významově se jedná o dvě různé věci, i když se nazývají stejně. Podmínka v cestě k elementu začíná a končí složenými závorkami { } a podmínka v MQL se skládá ze 3 částí. V podmínce v cestě k elementu se může vyskytovat více podmínek v MQL.

sestnastka-ep

Co když element nemá potomky?

V sekci Co jsou podmínky? jsme si řekli, že podmínky se vážou na rodičovský element a že v podmínkách se dá pracovat pouze se zanořenými elementy. Co když element nemá žádné potomky a zanořené elementy? Dají se i u takových elementů využít podmínky? Ano, dají.

Existují speciální atributy @@POSITION a @@VALUE (do budoucna jich budeme přidávat více). Tyto atributy se taky vážou na element a dají se tedy v podmínkách používat.

Uveďme si příklad:
Mějme následující data:

sedemnastka-epp

Máme vícenásobný element IMGURL_ALTERNATIVE se 3 hodnotami. Jak zacílíme jeho druhou hodnotu?

osemnastka-ep

Odpovědí je třetí obrázek z úvodu:

image4

Za element stačí napsat podmínku se speciálním atributem @@POSITION = 2 a taková cesta zacílí pouze na element IMGURL_ALTERNATIVE, jehož pozice je dva.

Dalším způsobem může být použití speciálního atributu @@VALUE:

trojka-ep

který vyfiltruje jen takové elementy IMGURL_ALTERNATIVE, jež mají hodnotu rovnu https://picsum.photos/400/300. Tento způsob zacílení na druhou hodnotu ale funguje pouze v případě, že element nenabývá dané hodnoty vícekrát. Jinak cesta zacílí na všechny takové hodnoty, tj. nejenom na hodnotu druhou.

Nejčastější použití

Podmínky jde obecně použít na jakékoliv elementy (a hlavně vícenásobné). V této sekci uvedeme několik příkladů, se kterými jsme se setkali v praxi. Pro přehlednost označujeme v příkladech podmínku žlutou barvou.

1. Parametry a doprava

Zcela jednoznačně nejčastější použití podmínek je u parametrů a dopravy. S jedním takovým příkladem jsme pracovali po celý příspěvek:

PARAM { PARAM_NAME = "Barva" } | VAL

Jedná se o cestu, která cílí na hodnotu parametru Barva, s elementy ze specifikace formátu Heureka nebo Zboží. Obdobně vypadají i cesty pro jiné formáty:

  • Shoptet: TEXT_PROPERTIES | TEXT_PROPERTY { NAME = "Barva" } | VALUE
  • Shoptet, filtrovací parametry: INFORMATION_PARAMETERS | INFORMATION_PARAMETER { NAME = "Barva" } | VALUE
  • Google: g:product_detail { g:attribute_name = "Barva" } | g:attribute_value

U dopravy se používá např. cesta na zacílení ceny pro určitého dopravce:

DELIVERY { DELIVERY_ID = "PPL" } | DELIVERY_PRICE_COD

:bulb: Parametry a dopravy jdou v MERGADO Editoru našeptávat.

predposledny-ep

2. Varianty

Jelikož bývá variant většinou více a chceme s variantami pracovat účelně a efektivně, používání podmínek se moc nevyhneme. Obvykle budeme chtít zacílit na nějaké konkrétní varianty.
Např. varianta, jejíž nějaký element nabývá nějaké konkrétní hodnoty. Jeden příklad jsme uvedli v sekci Správný zápis podmínky.

VARIANTS | VARIANT { PARAMETERS | PARAMETER { NAME = "Velikost" } | VALUE = "M" AND PARAMETERS | PARAMETER { NAME = "Materiál" } | VALUE = "Bavlna" } | STOCK | WAREHOUSES | WAREHOUSE | NAME

:information_source:  Někteří uživatelé používají na zacílení konkrétních variant i speciální atribut @@POSITION.

3. URL obrázků a kategorie

Některé produkty mohou mít více obrázků. Abychom zacílili konkrétní obrázek, nebo skupinu obrázků, použijeme @@POSITION nebo @@VALUE a k nim vhodné operátory. Jeden příklad jsme uvedli v sekci Co když element nemá potomky?, dalšími příklady jsou třeba

  • IMGURL_ALTERNATIVE { @@POSITION >= 3 }
  • IMGURL_ALTERNATIVE { @@POSITION >= 3 AND @@POSITION <= 8 }
  • IMGURL_ALTERNATIVE { @@VALUE != "https://picsum.photos/400/300" }

Méně často, ale přeci jen se to stává, mohou mít produkty i více kategorií, např. formát Shoptet to tak má.

Chceme-li zacílit konkrétní kategorii, nebo skupinu kategorií, opět použijeme @@POSITION nebo @@VALUE a k nim vhodné operátory. Například:

  • CATEGORIES | CATEGORY { @@POSITION < 3 }
  • CATEGORIES | CATEGORY { @@VALUE NOT CONTAINS "Dětská hřiště" }

Shrnutí

  • Co jsou podmínky?
    Podmínky v cestě k nějakému elementu jsou filtrem, který nám v rámci dané cesty umožňuje filtrovat hodnoty a jejich elementy. Zapisují se do složených závorek { } a vážou se k elementu, jenž se vyskytuje nalevo od nich. V podmínkách se dá filtrovat pouze přes elementy zanořené v elementu, na který se podmínky vážou.

  • K čemu jsou podmínky?
    Podmínky zpřesňují zadanou cestu a umožňují tak zacílit na konkrétnější podskupinu hodnot daného elementu.

  • Jak se správně podmínky zapisují?
    Mějme cestu PARAM { PARAM_NAME = "Barva" } | VAL. Základní šablona pro psaní podmínky je:

    trinástka-ep

  • Co když element nemá potomky?
    I u takových elementů se dají využít podmínky. Existují totiž speciální atributy, které se vážou na element a dají se tedy v podmínkách používat.

  • Nejčastější použití
    Podmínky v cestě k elementu použijeme nejčastěji u práce s parametry, dopravami, variantami, kategoriemi a u URL obrázků.

1 Like