18. 11. 2009

PostNuke - Upravujeme xanthia motiv : práce se šablonami

Pomalu se dostáváme do závěrečné fáze tohoto seriálu. Jistě nejzajímavější, ale také nikterak jednoduché. Zvládnete-li však obsah tohoto článku, pak máte k úpravě vzhledu vašeho webu vskutku dveře otevřené dokořán.

Šablony jako Wordu ...

Pro pochopení celého systému šablon jsem si dovolil vstoupit na pole Microsoftu (mohl bych ale klidně mluvit o OpenOffice Writeru, samozřejmě). Pokud rozumíte systému vytváření šablon (například ve Wordu) a jejich následné využívání při vytváření nových dokumentů, máte z půlky vyhráno.

Jistě víte, že šablona na Wordu je vlastně soubor s příponou dot, která nezřídka bývá uložená ve zvláštním adresáři. Při využití této šablony se vlastně otevírá prázdný dokument sice s předem připraveným obsahem, nicméně je do svého prvního uložení uschován v dočasné paměti. Po svém uložení se však takový soubor stává na šabloně nezávislý, což je u dokumentů povětšinou dobře.
Problém však může nastat v momentě, kdy si pomocí šablon vytvoříte více dokumentů. Změníte-li však obsah šablony, tyto změny se v dříve vytvořených dokumentech neprojeví. Na druhou stranu nově vytvářené dokumenty již obsahují úpravy, které jste v šabloně provedli.
S xanthia-motivy je to nadmíru obdobné ...
Veškeré šablony xanthia-motivů máte uloženy v adresáři templates. Pokud šablony "neaktivujete", tj. pokud neaktivujete celý motiv, můžete provádět úpravy příslušných souborů. Jakmile však motiv zaktivujete, vytvoří se "dočasné" soubory a to konkrétně v adresáři pnTemp/Xanthia_compiled. Přitom názvy těchto souborů obsahují název motivu, zkratku jazyka a na konci název šablony.
Zkompilované soubory mnohem rychleji generují (X)HTML kód, který je využíván při zobrazování vzhledu webu. Nejsou však již nikterak propojeny se šablonou a tudíž jakákoliv změna obsahu šablony nemá na vzhled webu žádný vliv. Potud je systém šablon prakticky shodný s Wordem.
Rozdíl však nastane v momentě, kdy příslušný motiv deaktivujete. V takovém případě zkompilované soubory pozbývají platnosti. Po opětovné aktivaci motivu se totiž v adresáři pnTemp/Xanthia_compiled vygenerují nové soubory z právě platných šablon.
Tak které soubory mám upravovat?
Po pravdě řečeno neexistuje jednoznačný návod. Mohu vám pouze doporučit svůj postup, který navíc obsahuje jednu drobnou fintu....

Chci-li testovat změny pouze (X)HTML kódu, nejčastěji pracuji se zkompilovaným souborem v adresáři pnTemp/Xanthia_compiled. Změny se totiž projevují ihned. Jsem-li se změnami spokojen, přenáším je přímo do šablony. Na závěr této činnosti deaktivuji příslušný motiv a následně ho opět aktivuji - díky tomu se mi implementují nové šablony a nemusím mít obavy, že se mi v budoucnu případné změny neztratí.
A teď ta finta ... Nezřídka chci v šabloně opravit kód, který využívá technologii Smarty (čili vpasovaný php kód). V takovém případě může být úprava zkompilovaného souboru nepřehledná, někdy i riskantní. V takovém případě pracuji přímo se šablonou, jakmile však chci otestovat mnou provedené úpravy, nejprve vymažu příslušný zkompilovaný soubor v adresáři pnTemp/Xanthia_compiled. V momentě, kdy aktualizuji přes webový prohlížeč stránku, systém zjistí, že mu příslušný zkompilovaný soubor chybí a vygeneruje si jej z platné šablony.
Nutno přiznat, že ne vždy to funguje stoprocentně, ale v drtivé většině případů ano.

S jakým kódem se v šablonách setkáte?

Předpokládejme, že (X)HTML kód vás nepřekvapí. Takže se budeme soustředit pouze na ty části, které jsou při kompilaci nahrazovány (a tudíž jsou smyslem šablon). Tento kód poznáte vcelku jednoduše:
  • v šabloně je tvořen ,
  • ve zkompilovaném souboru najdete na stejném místě
Chcete-li se poněkud lépe zorientovat, doporučuji, abyste si otevřeli nějakou šablonu a zároveň její zkompilovanou podobu. V každém případě však platí, že změny kódu, související se šablonami, doporučuji upravovat přímo v šabloně. Proto další popis budu orientovat na zápis .
Proměnné motivu
Při popisu konfigurace jsme popisovali deklarování proměnné motivu pomocí funkce CreateThemeVar( ... ). V takovém případě stačí do kódu napsat například a při překladu bude tato část nahrazena potřebnou hodnotou.
Proměnné systému PostNuke
Pokud si jste jisti, že systém Postnuke na dané stránce využívá nějakou proměnnou, deklarovanou v php kódu, pak ji můžete použít pomocí stejného zápisu jako v předchozím případě, například využívá proměnnou, která je definována v souboru theme.php na řádku 47. Konkrétně se jedná o cestu do adresáře, kde jsou uloženy obrázky motivu.
Takže například kód určuje, že se má použít soubor close.gif, který je uložen v obrázcích daného motivu. Všimněte si, že díky tomuto zápisu není nutné znát absolutní ani relativní cestu k danému obrázku, stačí ho pouze umístit do správného adresáře.

Funkce definované v rámci PostNuke
V článku Upravujeme motiv ... pár slov na úvod je v kapitole Smarty, pnRender a Xanthia - to mi nic neříká ... popsáno, kde se ukládají soubory s funkcemi. Konkrétně se jedná o soubory, které mají název souboru funkcion.nazevfunkce.php. Chcete-li příslušnou funkci použít, pak stačí napsat kód .
Některé funkce navíc mohou předávat různé parametry. Když jsme rozebírali barvy, narazili jsme na funkci . V tomto případě je využíván parametr color. Chcete-li vědět, jak je tento parametr využíván, podívejte se na obsah souboru function.themecolor.php (většinou bývá uložen buď v adresáři themes/nazevmotivu/plugins nebo modules/Xanthia/plugins). Uvnitř kódu najdete proměnnou $color a práci s ní.
Obecné funkce Smarty
Otevřete-li si soubor themes/nazevmotivu/tempates/master.htm najdete v ní kód a následně . Proměnnou $righton jsme si již vysvětlili a předpokládám, že z kódu je zřejmé, že se jedná o podmínku. Otázkou je, jaké funkce můžete ještě využívat.
Zde vás odkazuji na oficiální část dokumentace Smarty, zabývajícíci se právě zabudovanými funkcemi (anglicky), případně další české webové stránky o Smarty http://smarty.ronnieweb.net/.