Výpis šablon a formátovače
Assety Šablona a Formátovač v systému jNetPublish se podobají jeden druhému v tom, že jde vždy o kolekci TFS šablon (tedy uzavřených fragmentů TFS kódu) spolu se seznamem pravidel, jimiž se řídí výběr konkrétní TFS šablony.
Šablona se volá explicitně, příkazem pro výpis, kde vypisovanou hodnotou je asset tohoto typu.
Formátovač se typicky volá implicitně, v situaci, kdy je potřeba vypsat některý asset, který sám šablonu výpisu nedefinuje.
Proměnné ovlivňující výpis
V obou případech se výběr vypsaného TFS fragmentu řídí aktuálním režimem, jazykem a formátem. Aktuální hodnoty těchto proměnných jsou v každém okamžiku dostupné jako TFS proměnné _language, _format a _mode.
Jazyk a formát
Jak jazyk, tak formát jsou reprezentované řetězcem. Možné hodnoty závisejí na konfiguraci prezentace; typicky je jazyk "cz" (čeština) a formát "html".
Výchozí jazyk a formát se získají při zpracování URL – ta se rozparsuje a vytvoří se vstupní identifikace stránky, obsahující jazyk a formát jako podhodnoty.
Aktuální hodnotu je možné změnit pomocí parametrů forceLanguage
a forceFormat
příkazu options. Uvnitř tohoto bloku (i v šablonách volaných z šablony, která blok obsahuje) jsou hodnoty změněné specifikovaným způsobem.
Režim
Režim je proměnná umožňující uživatelsky ovlivnit volbu vypisovaného TFS fragmentu. Zadává se jak pro volání šablony, tak pro volání výpisu jiného assetu (a tedy implicitně volání formátovače) jako parametr příkazu výpisu mode
.
Pokud není režim uveden explicitně, použije se režim, ve kterém se vypisuje volající šablona nebo formátovač. Na začátku je to tedy prázdný řetězec. Uživatelské rozhraní nedovoluje definovat pravidlo šablony nebo formátovače pro režim "" – místo toho se používají pravila, kde na režimu nezáleží.
Interpretace pravidel šablony
Šablona je definovaná posloupností pravidel; každé pravidlo má podmínky (jazyk, formát a režim) a tělo TFS šablony. V každé podmínce může být uvedená konkrétní hodnota, nebo může být určeno, že na dané proměnné nezáleží (ve výpisu označeno hvězdičkou).
Při vypisování se procházejí pravidla v tom pořadí, v jakém jsou definovaná, a použije se první pravidlo takové, že aktuální hodnoty proměnných vyhovují jeho podmínkám.
Pokud není nalezeno žádné takové pravidlo, nevypíše se nic.
Použití formátovače
Jak bylo řečeno, formátovač se typicky nevolá explicitně. Který formátovač se použije, závisí na primární sekci: nejprve se bere formátovač daný hodnotou atributu formatter
primární sekce nebo jejího nejbližšího předka, který má formátovač nastavený.
Pravidla formátovače mají proti šablonám jednu podmínku navíc: typ vypisovaného assetu. Při ověřování, zda aktuální hodnoty vyhovují podmínkám pravidla, se také kontroluje, zda vypisovaný asset je buď přímo typu uvedeného v podmínce, nebo některého z jeho podtypů.
Pravidla formátovače se opět interpretují sekvenčně a bere se první pravidlo vyhovující aktuálním hodnotám.
Pokud není nalezeno žádné takové pravidlo, pokračuje se případně formátovačem nastaveným u některé ze sekcí, která je předkem primární sekce.
Pokud není nalezeno žádné vyhovující pravidlo v žádném z těchto formátovačů, nevypíše se nic.
Explicitní volba formátovače
V příkazu vypsání assetu je od verze 3.5 možné také explicitně uvést formátovač, který se má k vypsání assetu použít. Formátovač se uvádí jako hodnota parametru asset:formatter
.
Vliv platnosti a zákazu assetu na výpis
Pokud se v příkazu pro vypsání assetu vyskytne zakázaný asset (s hodnotou atributu disabled
nastavenou na true
), nevypíše se nic.
Toto chování je možné potlačit parametrem asset:showDisabled
nastaveným na true
: pak se hodnota atributu disabled
při výpisu ignoruje.
Časové omezení platnosti nemá na možnost vypsání assetu formátovačem žádný vliv – vypsiují se jak platné assety, tak asset, které už nebo ještě nejsou platné.
Typy assetů, pro které se nepoužije formátovač
- Šablona: viz výše.
- Pagelet: definuje si vlastní šablonu a může s ní zacházet podle svých vlastních pravidel.
- Zástupce: za normálních okolností funguje jako transparentní zástupce jiného assetu; ve formátovači se zpracovává zastupovaný asset. Toto je možné ovlivnit parametrem
asset:showProxy
. Viz dokumentaci.