Autor: JIz

acquire

Explicitní volání akvizice, tzn. nalezení pojmenované hodnoty ve stromu assetů.

Object acquire (
    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é.

Příklad: Omezení akvizice na vlastnosti
Zápis s vykřičníkem
<body class="{_primary!colors}">
  ...
</body>
Zápis s explicitním omezením na vlastnosti
<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 a colors_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.)

Pro vložení příspěvku do diskuse se přihlašte.