acquire
Explicitní volání akvizice, tzn. nalezení pojmenované hodnoty ve stromu assetů.
Objectacquire
(
Asset start,
String field [,
String strategy-shallow [,
String strategy-deep [,
Integer depth ] ] ])
- start
- Asset, jehož atributy, vlastnosti a dětské assety se mají zkoumat. Pokud zadaná hodnota není asset, nedojde k chybě; funkce se bude chovat jako běžná selekce podhodnoty.
- field
- Název hledané položky. Nemá smysl zadávat nic jiného než platné systémové názvy, ale zadání jiné hodnoty nezpůsobí chybu. V závislosti na konfiguraci systému jNetPublish může funkce s řetězcem začínajícím podtržítkem zacházet jako s neplatným názvem.
- strategy-shallow
Pořadí prohledávaných položek u samotného assetu start. Položky se uvádějí jednopísmennými zkratkami v požadovaném pořadí:
a
- Atribut s daným názvem nebo s názvem rozšířeným o sufix pro aktuální jazyk. Pokud není nalezena ne-
null
hodnota, pokračuje se další položkou v řetězci. A
- Atribut s daným názvem nebo s názvem rozšířeným o sufix pro aktuální jazyk. Pokud je atribut pro daný typ assetu definovaný, vrátí jeho hodnotu, i kdyby byla
null
. Pokud tento typ assetu nemá atribut s daným názvem, pokračuje se další položkou v řetězci. p
- Vlastnost s daným názvem nebo s názvem rozšířeným o sufix pro aktuální jazyk. Pokud není nalezena ne-
null
hodnota, pokračuje se další položkou v řetězci. P
- Vlastnost s daným názvem nebo s názvem rozšířeným o sufix pro aktuální jazyk. Pokud má asset vlastnost daného názvu, vrátí její hodnotu, i kdyby byla
null
. Pokud asset nemá vlastnost s daným názvem, pokračuje se další položkou v řetězci. c
- Dětský asset s daným názvem nebo s názvem rozšířeným o sufix pro aktuální jazyk.
- strategy-deep
- Pořadí prohledávaných položek u rodiče assetu a případně jeho vzdálenějších předků. Možné hodnoty jsou stejné jako v předchozím případě. Pokud tato hodnota není zadaná, bere se stejné pořadí jako ve strategy-shallow.
- depth
- Maximální hloubka hledání. Hodnota 0 znamená, že se hledá jen u assetu start, hodnota 1, že se hledá u assetu start a u jeho rodiče; atd. Defaultní hodnota je
null
, tzn. neomezená hloubka.
Motivace
Assetová databáze obsahuje strukturovaná data: assety určitých typů. Asset může obsahovat data svázaná s ním různými způsoby:
- Podle typu má každý asset pevně danou množinu atributů. Atribut má pevně daný typ hodnoty, z pohledu autora šablon není na typ hodnoty kladeno žádné principiální omezení.
- Vedle toho je možné každému assetu přidávat libovolně pojmenované vlastnosti, jejichž hodnotou je buď reference na asset, nebo řetězec.
- Třetí typ relace je daný uspořádáním assetů v assetovém stromě: na dětské assety výchozího assetu se můžeme také dívat jako na data v něm obsažená.
Akvizice je prostředek, kterým je možné získat hodnotu obsaženou v assetu pod určitým jménem, aniž by bylo vždy nutné dopředu specifikovat, jaká vazba je mezi assetem obsahujícím data a požadovanými daty.
Související výklad je možné nalézt v obecném popisu práce s assetem.
Operátory zjednodušující zápis
Akvizici lze také zapsat v kratší formě, analogicky k operátoru selekce. Zápis
start!
fieldname
je zkratkou za
acquire(
start, "
fieldname", "acp")
Také operátor selekce je možné vyjádřit jako akvizici s nulovou hloubkou, ale pozor, priorita vyhodnocení je odlišná. Tzn.
start.
fieldname
je zkratkou za
acquire(
start, "
fieldname", "APc", "APc", 0)
Možnosti optimalizace
Časté hledání dětského assetu podle jména může vést k výkonovým problémům. Doporučuje se vyloučit prohledávání dětských assetů z akvizice, pokud je to s ohledem na požadovanou prezentační logiku možné.
<body class="{_primary!colors}">
...
</body>
<body class="{acquire(_primary, "colors", "p")}">
...
</body>
Předpokládejme, že návrh prezentace, ze které je uvedený fragment šablony, počítá s možností, že některým sekcím je možné nastavit vlastnost s názvem colors
, jejíž hodnotou bude název třídy, která je v CSS použitá pro definici barevného schématu. Chceme, aby se nastavení hodnoty dědilo, a aby ho bylo možné libovolně předefinovat.
V šabloně obsahující počáteční tag HTML elementu body
je potřeba získat aktuální hodnotu colors
.
Obojí zápis bude většinou fungovat požadovaným způsobem. Rozdíly jsou ale významné:
- Explicitní uvedení vlastnosti vede k tomu, že se v každém kroku hledání ve stromu sekcí eliminuje dotaz na dětské assety s názvem
colors
acolors_cz
. - Zápis s vykřičníkem může někdy skutečně najít asset s názvem
colors
, což pravděpodobně úplně rozbije výpis.
(Pro jednoduchost předpokládáme, že typ assetu _primary
nedefinuje atribut colors
.)