Autor: JIz

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

Příklad: Odkaz ze šablony na konkrétní asset
Vstup
<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.

Příklad: Eliminace reference na neopakovatelný obsah
Nevhodné užití
{if not(_main == _template.rfTarifPremium)}
  {_main mode="attachments"}
{/if}
Obecnější postup
{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ů.

Příklad: Výpis hierarchického menu dotazovým zdrojem
Defaultní režim šablony
<ul>
{while _template.root_menu}
  {_template mode="node" node=_.asset}
{/while}
</ul>
Režim "node"
<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.

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