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 + B
neboOption + í
(Mac) a pravá závorka pomocí pravéhoAlt + N
neboOption + é
(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ů.