FastTemplates – šablony v PHP

26. října 2000

FastTemplates je port Perlového skriptu CGI::FastTemplate do PHP. Jeho hlavním posláním je oddělit PHP kód od HTML a tím ho zpřehlednit. O vhodnosti používání FastTemplates se v konferencích o PHP vedly rozsáhlé diskuze. Odpůrci FastTemplates tvrdili, že výhodou PHP je právě možnost neomezeného prokládání HTML a PHP. Hlavní argument zastánců FastTemplates byl fakt, že rozsáhlé PHP projekty ztrácejí přehlednost, která se jim dá vrátit jedině oddělením PHP od HTML. Rozhodnutí, zda FastTemplates, či jiný systém šablon, používat nebo ne, nechám čistě na vás. Nyní se pojďme na FastTemplates podívat blíže.

K čemu jsou šablony dobré?

Když oddělíte PHP (vlastní kód a logiku aplikace) od HTML (designu), je možné snadno měnit vzhled aplikace bez zásahu do programu a tudíž bez znalosti PHP. Můžete rovněž vytvořit několik různých šablon a mít vlastně k jedné aplikaci několik designů nebo několik jazykových verzí. I když nevyužijete žádnou ze jmenovaných možností, stále získáte daleko přehlednější PHP kód, než když budete PHP s HTML prokládat.

Šablony navíc můžete použít pro cokoli. Nemusí jít nutně o www stránky. Pomocí šablon můžete generovat třeba text nějakého zpravodaje, který pak rozesíláte e-mailem, RDF/RSS dokumenty nebo jakýkoli jiný text.

Jak vypadá šablona?

Šablona ve FastTemplates je textový soubor s HTML formátem, který může navíc obsahovat proměnné, které jsou ve výsledku nahrazeny skutečnými hodnotami. Proměnná se do šablony vkládá pomocí složených závorek, např. {PROMENNA}.

Příklad jednoduché šablony může vypadat takto:

<table>
<td>{NAZEV}</td>
<td>{HODNOTA}</td>
</table>

FastTemplates a rychlost

Už z názvu vyplývá, že FastTemplates by měly být rychlé. Autor tvrdí, že k interpolaci proměnné používá pouze jeden regulární výraz. Ze zdrojového kódu však vyplývá, že pokud potřebujete nahradit více proměnných, interpolace se provede vícekrát. Určitá ztráta rychlosti oproti klasickému „bez šablonovému“ přístupu tedy pochopitelně nastává.

Řešením by byla nová funkce, implementovaná až v PHP4 (a v posledních, bohužel, ne moc rozšířených verzí PHP 3), která umí provést nahrazení několika řetězců na jedno volání funkce. Tu však zatím FastTemplates nevyužívají.

Postup při používání FastTemplates

FastTemplates je PHP třída, jejíž základní použití sestává ze čtyř kroků:

  • Definice šablon
  • Přiřazení šablon k souborům
  • Zpracování (parse) = nahrazení proměnných hodnotami
  • Tisk nebo jiné užití výsledků

Příklad na pochopení celého principu:

Máme třeba šablonu nazvanou jako „stranka.tpl“ s následujícím obsahem:

<html>
<head>
<title>{TITULEK}</title>
</head>
<body>
{TEXT}
</body>

Použití této šablony názorně ilustruje následující PHP kód ve použitý stránce index.php3:

include(„class.FastTemplate.php3“);

$tpl = FastTemplate(„/cesta/k/sablonam“);
$tpl->define( array( stranka => „stranka.tpl“ ));

$tpl->assign(TITLE, „Titulek stranky“);
$tpl->assign(TEXT, „Text, který se zobrazí na stránce…“);

$tpl->parse(VYSLEDEK, „stranka“);
$tpl->FastPrint(VYSLEDEK);

Všimněte si, že příkaz funkce define() má jako parametr pole. Proto můžete jedním voláním funkce definovat více šablon. Toto volání je výhodné umístit do nějakého include souboru, který pak používáte ve všech PHP skriptech. Tím si značně zjednodušíte práci s FastTemplates. Nemusíte se obávat zpomalení skriptu, který zrovna některou z definovaných šablon nebude využívat, protože šablona se načte do paměti až při prvním volání funkce parse(). Funkce define() tedy pouze přiřazuje jména šablon, se kterými se operuje, ke skutečným souborům.

Funkce assign() vlastně zavádí vnitřní proměnné v tříde FastTemplates. Kdyby se totiž měly interpolovat veškeré proměnné definované ve skriptu, což by bylo také možné, trvalo by to podstatně déle. Proto ta nutnost zavádění vnitřních proměnných.

Funkce assign() využívá možnosti přetěžování operátorů v PHP, díky čemuž jí lze volat dvěma způsoby. První je ten, který jsem použil výše, druhý, který se vyplatí pokud přiřazujete více proměnných na jednou, je použít jako parametr pole. Výše uvedené přiřazení by bylo možné udělat pomocí jednoho volání funkce assign() následovně:

$tpl->assign( array( TITLE => ‚Titulek stranky‘, TEXT => ‚Text, který se zobrazí na stránce…‘));

Spojování a vnořování šablon

Výstupy parsování šablon nemusíme nutně ihned posílat na výstup. Můžeme je totiž elegantně spojovat s dalšími. Následující kód k proměnné VYSLEDEK přidá výstup další šablony (díky tečce před jménem šablony).

$tpl->parse(VYSLEDEK, „.dalsi“);
$tpl->FastPrint(VYSLEDEK);

Další možností je vnořovat šablony do sebe. Zde využijeme toho, že výstup šablony je automaticky uložen ve FastTemplates jako vnitřní proměnná (např. výše vznikne proměnná VYSLEDEK, která obsahuje výstup šablony). Tuto proměnnou pak jednoduše použijeme v jiné šabloně, kterou budeme generovat následně. Tak můžeme vytvořit poměrně složitou strukturu vnořených šablon. Například bude šablona s hlavní stránkou, v ní bude další šablona obsahující tabulku a v ní se několikrát zopakuje šablona s jednotlivými řádky tabulky.

Všimněte si, že šablony neobsahují nic, než holé proměnné. Nemají v sobě žádnou logiku. Veškerá logika zůstává na straně PHP. V šablonách je pouze design. Autor šablon dokonce odmítl přidat dvě funkce, které v původní perlové verzi byly – jedna se o define_nofile() a define_raw(), a které dávaly šablonám logiku. V Perlu to možná mělo smysl, protože Perl nebyl s HTML tak jednoduše propojitelný jako PHP. Účelem FastTemplates je ale eliminovat HTML z PHP kódu, nikoli hledat nové cesty, jak ho tam zase dostat :o).

Jediné rozšíření šablony, které je možné je tzv. dynamický blok, což je vlastně šablona definovaná uvnitř jiné šablony. I když to tak na první pohled může vypadat, není to nic, co by dávalo šablonám nějakou inteligenci. Jde vlastně o definici šablony (většinou malé) uvnitř jiné. Tím ušetříme jeden soubor a možná si to trochu zpřehledníme. Nic víc.

Závěr

Na závěr bych chtěl jenom říct, že FastTemplates pochopitelně nejsou jediným exemplářem tohoto druhu, nicméně patří mezi ty známější a užívanější. Pokud jste příznivcem knihovny PHPLib, tak např. ta má vlastní systém šablon. Dále existuje celá řada jiných řešení i různých modifikací FastTemplates (např. Cached FastTemplates) od jiných autorů, ale o těch zase někdy příště.

Zdrojový kód FastTemplates je zdarma k dispozici na serveru TheWebmasters.net.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *