Připojení složitějšího stylu

Většina kaskádových stylů odkazovaných ze stránky sama obsahuje další webové adresy: zejména URL obrázků na pozadí. Připojení takových stylů předpokládá vytvoření šablony a sekce zobrazující styl.

Sekce pro styly

Sekce pro styly se vytváří přímo v kořenové sekci dané prezentace. V našich příkladech pro ni zvolíme jméno styles.

Každá sekce, na kterou v prezentaci vedou odkazy, musí být obsažená v kořenové sekci prezentace, jak ji definuje konfigurace prezentace. Sekce se styly je jazykově nespecifická, proto se i u nesymetrické prezentace umisťuje přímo do kořenové sekce prezentace. Je ale skutečně bezpodmínečně nutné nastavovat jazyk "none", jak je uvedeno v následujících příkladech.

Generování statické podoby stylů

Styly se obyčejně mění poměrně málo, nezávisí na obsahu a jejich podoba je zcela nezávislá na jakékoli interakci s uživatelem. Proto je obyčejně výhodné jednou vygenerovaný styl ukládat na souborový systém a příště poskytovat jako soubor (samozřejmě dokud se nezmění).

Toto chování lze nastavit příznakem Generovat statickou podobu u sekce pro styly. Nastavení se vztahuje na veškerý obsah zveřejňovaný v této sekci.

Šablona sekce pro styly

Jako šablona sekce pro styly se nastavuje speciální šablona (konvenčně nazývaná pass_thru), která jednoduše zobrazí hlavní obsahový asset adresovaný v URL stylu. Umožní to prezentovat v sekci různé styly. Hlavní obsahový asset je hodnotou proměnné _main.

Šablona pass_thru
{_main}

Složka pro styly

Samotné styly je žádoucí umístit odděleně, tak, aby nebyly přístupné pro správce obsahu a publikované struktury prezentace. Vytváří se pro ně obyčejně samostatná podsložka v logic pro příslušnou prezentaci.

Tato podsložka se pak nastavuje jako datová složka sekce pro styly. Efektem tohoto (jinak celkem zbytného) nastavení jsou jednodušší URL stylů.

Samotné styly

Každý styl je představovaný další šablonou ve složce pro styly.

Oddělení TFS kódu ve stylu

Pokud má šablona generovat styl, je třeba se nějakým způsobem vypořádat se skutečností, že ve stylu se často vyskytují složené závorky. Tyto závorky by totiž měly v jazyce TFS speciální význam: parser by je interpretoval jako znaky, které vyznačují TFS instrukce.

Pro styly je tedy třeba přepnout režim zpracování šablony: na začátek stylu umístit trojici znaků {<? a na jeho konec trojici znaků ?>}. Vše, co je mezi těmito sekvencemi, se zpracovává odlišně: složené závorky zde nemají žádný speciální význam a pro vyznačení TFS instrukcí se používají znaky <? na začátku a ?> na konci.

Pokud tedy přidáme na začátek stylu znaky {<? a na jeho konec ?>}, můžeme ho použít jako tělo šablony.

Odkazování na styly

Styl obsažený v šabloně bude systém zveřejňovat jako stránku identifikovanou následujícími hodnotami:

  • obsahový asset je šablona se stylem;
  • primární sekce je sekce vytvořená pro styly;
  • formát výstupu je css;
  • výpis je jazykově nespecifický, tzn. jazyk je none.

K sestrojení takto strukturovaných odkazů slouží funkce link. Bylo by tedy možné připojit k hlavní šabloně vlastnosti referující k šabloně se stylem a k sekci pro styly a vytvořit odkaz v šabloně.

Funkce link
<link href="{link(_template.styles_section, _template.screen_css, "css", "none")}"
  type="text/css" media="screen" rel="stylesheet" />

Oddělení definice odkazu

Opět je ale lepší praxe vytvořit celý odkaz v editaci odkazů šablony a pak ho načítat pomocí funkce target. V tomto případě půjde o interní odkaz; je třeba nastavit v něm všechny položky uvedené výše.

Funkce target
<link href="{target(_template, "screen_css")}"
  type="text/css" media="screen" rel="stylesheet" />

Verzování odkazu

Odkazy na styly se generují do statické podoby. Optimálního výsledku při jejich ukládání do vyrovnávací paměti prohlížeče se dosáhne, pokud bude HTTP hlavička Expires nastavená na vzdálenou budoucnost (to musí zajistit administrátor příslušné instance systému) a současně se URL mění s každou novou verzí stylu.

Pro toto je vhodné použít parametr výpisu odkazu link:version_asset. Hodnotou tohoto parametru musí být asset. Z interního odkazu je možné získat obsahový asset jako jeho vlastnost main. Použijeme konstrukci s příkazem with, který nastaví získaný odkaz jako hodnotu proměnné _.

"Verzovaný" odkaz
<link href="{with target(_template, "screen_css")}{_ link:version_asset=_.main}{/with}"
  type="text/css" media="screen" rel="stylesheet" />

Pokud by se typ odkazu na styl změnil na něco jiného než interní odkaz, nebude mít uvedený zápis s link:version_asset žádný efekt, ale také nebude ničemu na škodu.

URL obsažená ve stylu

Všechny tyto kroky jsme podnikli proto, abychom mohli ve stylu používat URL obrázků na základě identifikace assetů, které obrázky obsahují.

Obrázky pro styl se pokládají za součást prezentační logiky; vytvoříme tedy pro ně podsložku images. V ní vytvoříme pro každý obrázek jeden asset. (Dá se předpokládat, že takových obrázků nebude mnoho. Pokud je ve stylu obsaženo velké množství odkazů na obrázky, je to důvod uvažovat o jeho optimalizaci ještě před převodem do systému jNetPublish.)

V případě odkazů na obrázky nepředpokládáme, že by bylo nutné do budoucna měnit typ odkazu. Proto pro vytvoření odkazu na obrázek v šabloně stylu použijeme funkci ref způsobem popsaným v předchozí kapitole. Odlišností je použití znaků <? na začátku a ?> na konci TFS instrukcí.

Odkaz na obrázek
{<?
...
#header { background-image: url('<? ref(_template.header) ?>'); }
#footer { background-image: url('<? ref(_template.footer) ?>'); }
...
?>}

V některých existujících prezentacích se k šabloně připojuje reference na složku s obrázky a k jednotlivým obrázkům se přistupuje podle jejich systémového názvu, tzn. konstrukty jako _template.images.background. Takový postup nelze doporučit minimálně ze dvou důvodů:

  • Na jednotlivé obrázky nevede explicitní reference. Toto značně komplikuje údržbu prezentační logiky: neexistuje jednoduchý přehled o tom, které obrázky se skutečně používají a které už je možné odstranit.
  • Komplikací podobného druhu je, že obrázky nelze přejmenovat ani přesunout.
  • Častý přístup k assetu podle jeho systémového názvu může být výkonový problém.

Pokud ve svém stylu odkazujete velké množství obrázků, naznačuje to, že styl je i tak navržený špatně; vždy je žádoucí použít techniky omezující počet HTTP požadavků.

Pokud potřebujete přistupovat k assetu obrázku nepřímo, přes jiný asset (například asset reprezentující schéma barev), vždy je třeba, aby tento asset obsahoval vlastnost s referencí na odkazovaný asset.

Shrnutí

Složitější styl se z pohledu autora prezentační logiky generuje podobným způsobem jako HTML stránka, která ho odkazuje. Samotný styl je obsažený v adresované šabloně a může obsahovat dynamicky generované odkazy na soubory, zejména obrázky.

Stránky tutoriálu:
Pro vložení příspěvku do diskuse se přihlašte.