_template
Aktuální šablona nebo formátovač.
Jde tedy o asset typu Šablona nebo Formátovač, který v sobě sdružuje jedno nebo několik pravidel; mimo jiné také pravidlo, které se aktuálně uplatňuje při výpisu.
Využití 1: přímý přístup ke konkrétním assetům
Šablona nebo formátovač může (stejně jako každý jiný asset) mít vlastnosti typu reference – pojmenované odkazy na libovolné assety.
K hodnotě vlastnosti šablony nebo formátovače s názvem property-name je možné přistupovat výrazem _template
.property-name. Tímto způsobem lze tedy ze šablony přistupovat k jakémukoli konkrétnímu assetu.
<div id="header">
<a href="{link(_site.homeSection)}">
{<img src=_template.logo alt="" />}
</a>
</div>
Šablona musí mít vlastnost typu reference s názvem logo
; předpokládáme, že cílem reference je obrázek.
I použití referencí na konkrétní asset je třeba dobře uvážit: Šablona by měla „vědět“ jen o dalších assetech definujících prezentační logiku. Je nevhodné, aby odkazovala konkrétní neopakovatelné prvky obsahu nebo struktury prezentace. Jednak by tím způsobem blokovala volnou manipulaci s tímto obsahem, jednak se to dá brát jako indikace nesprávného zobecnění v rámci prezentační logiky.
{if not(_main == _template.rfTarifPremium)}
{_main mode="attachments"}
{/if}
{if not(in("hideAttachments", _main.controlWordsSet))}
{_main mode="attachments"}
{/if}
V první ukázce autor prezentační logiky využil toho, že k šabloně může připojit referenci na jeden konkrétní asset (článek). Význam podmínky je, že tento konkrétní asset se nemá vypisovat v režimu attachments
, zatímco všechny ostatní články ano.
Nevýhody tohoto postupu jsou:
- Správce obsahu tento článek nemůže smazat (vede na něj reference).
- Pokud budou přibývat další články se stejným způsobem výpisu, bude pokaždé nutný zásah do této šablony a její složitost poroste.
Druhý přístup volbu konkrétních assetů „deleguje“ na (poučenějšího) správce obsahu: definuje konvenci pro potlačení výpisu assetu v režimu attachments
, a sice nastavení řídícího slova hideAttachments
. Tím se eliminují obě zmíněné nevýhody.
Využití 2: volání aktuální šablony
Šablona může rekurzivně volat sebe sama: jednak jiné pravidlo v rámci assetu šablony, jednak totéž pravidlo s jinými hodnotami parametrů.
<ul>
{while _template.root_menu}
{_template mode="node" node=_.asset}
{/while}
</ul>
<li>
<a href="{link(node)}">{node.title}</a>
{if isParent(node, _primary)}
{while _template.menu_source folder=node}
{whilefirst}<ul>{/whilefirst}
{_template mode="node" node=_.asset}
{whilelast}</ul>{/whilelast}
{/while}
{/if}
</li>
Předpokládáme, že _template.root_menu
je výčtový datový zdroj obsahující první úroveň menu.
Výpis je rekurzivní, při opakovaném volání šablony v režimu node
se mění parametr reprezentující aktuální sekci (pojmenovaný také node
).
Vždy se vypíše odkaz na tuto sekci, a pokud je tato sekce předkem aktuální sekce, vypíšo se všechny její podsekce. K tomu se volá iterace přes zdroj _template.menu_source
, což musí být dotazový zdroj, který vrací podsekce zadané sekce.
Toto využití pochopitelně není vhodné, pokud se jedná o formátovač: tam je lepší uplatnit rekurzi při výpisu aktuálně formátovaného assetu.