V tomto příspěvku se dozvíme:
- Co jsou podmínky?
- K čemu jsou podmínky?
- Jak se správně podmínky zapisují?
- Co když element nemá potomky?
- Nejčastější použití
- 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.
Několik ukázek, na které jste možná někdy narazili:
Složené závorky { } se na české a slovenské klávesnici píší následovně: levá závorka pomocí pravého
Alt + BneboOption + í(Mac) a pravá závorka pomocí pravéhoAlt + NneboOption + é(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:

…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).

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.

A když postup rozdělíme do jednotlivých kroků, tak to vypadá takto:
- Vezmeme rodičovský (a vícenásobný) element PARAM…
postup čtení cestou:

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

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

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?

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:

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

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

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.

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

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:
![]()
Máme vícenásobný element IMGURL_ALTERNATIVE se 3 hodnotami. Jak zacílíme jeho druhou hodnotu?
![]()
Odpovědí je třetí obrázek z úvodu:
![]()
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:
![]()
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
Parametry a dopravy jdou v Mergado Editoru našeptávat.
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
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 cestuPARAM { PARAM_NAME = "Barva" } | VAL. Základní šablona pro psaní podmínky je:

-
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ů.

