SMARTY – syntaxe šablon

26. září 2003

V předchozím článku jsme se seznámili se základní filozofií šablonovacího systému SMARTY. V tomto článku si přiblížíme základy syntaxe šablon a základní použití třídy Smarty v našich skriptech.

Oddělovače

Šablony jsou standardní HTML stránky obsahující klíčová slova, které parser při kompilaci nahradí PHP kódem. K označení klíčových slov používá SMARTY oddělovače (delimiters), které lze libovolně nastavit. Standardně jsou pro tento účel používány složené závorky, které budeme používat i ve všech příkladech tohoto seriálu.

Oddělovače jsou definovány jako hodnota vlastností $left_delimiter a $right_delimiter třídy Smarty. Pokud by nám vyhovovala XML syntaxe, nastavení oddělovačů by mohlo vypadat následovně:

Smarty.class.php:


    /**
     * The left delimiter used for the template tags.
     *
     * @var string
     */
    var $left_delimiter = ‚<smarty:‘;
    /**
     * The right delimiter used for the template tags.
     *
     * @var string
     */
    var $right_delimiter = ‚/>‘;

šablona
…<smarty:$nazev_promenne/>…

Je však nutné upozornit, že tyto oddělovače se nesmí v samotné textu (HTML kódu) vyskytovat. Parser by se je totiž snažil interpretovat. Tomu zabráníme tím, že do textu místo těchto řetězců vložíme příkazy {ldelim} (pro levý oddělovač) a {rdelim} (pro pravý oddělovač).

Často se však stává (hlavně v případě použití složených závorek), že v kódu stránky je těchto znaků velmi mnoho a jejich nahrazení za výše uvedené příkazy by bylo složité a nepřehledné. Takovým případem mohou být kódy JavaScriptu vložené do HTML stránky. Pro tento účel lze použít příkaz {literal} ...text... {/literal}, který parseru říká, že text jím označený nemá být interpretován.

Proměnné

Proměnné jsou v šablonách označovány stejně jako v PHP skriptech. Tam, kam chceme vložit obsah proměnné, vložíme příkaz {$nazev_promenne}. Stejně jednoduše lze do šablon vkládat i hodnoty polí a objektů. Asociativní pole jsou vkládány tak, že název pole a klíč je oddělen tečkou. Například {$pole.zamestnanec.jmeno} je totéž jako v PHP echo $pole["zamestnanec"]["jmeno"]. Ještě jednodušeji jsou vkládány objekty a indexovaná pole. V těchto případech je syntaxe stejná jako v samotném PHP.

{$pole[0][1]}
{$objekt->vlastnost}

Proměnná $smarty

Systém SMARTY automaticky umožňuje v šablonách používat proměnnou $smarty. Tato proměnná je vlastně asociativním polem, které obsahuje několik velmi důležitých hodnot.

V první řadě jsou to hodnoty proměnných, předaných skriptu v následujících globálních polích: $_GET (resp. $HTTP_GET_VARS), $_POST, $_COOKIE, $_SESSION, $_ENV, $_SERVER a $_REQUEST. Přístup k těmto asociativním polím je velmi jednoduchý. Pokud chceme získat hodnotu proměnné userName předané skriptu odesláním formuláře, použijeme proměnou $smarty v následujícím tvaru: {$smarty.post.userName} (resp. {$smarty.get.userName}).

Aktuální počet sekund od 1. 1. 1970 lze přímo v šabloně získat prostřednictvím {$smarty.now}. Spíše něž počet sekund chceme však na stránkách prezentovat aktuální datum. Jak toho dosáhneme, si řekneme v příštím díle.

Dále lze prostřednictvím proměnné $smarty zjistit název šablony, která je právě zpracovávána ({$smarty.template}) a zpřístupnit konstanty definované v PHP skriptech prostřednictvím asociativního pole const ({$smarty.const.NAZEV_KONSTANTY}).

Další hodnoty, přístupné prostřednictvím proměnné $smarty, jsou úzce spojeny s jinými vlastnostmi systému SMARTY a proto se jimi budeme zabývat v dalších dílech.

Příkazy

Příkazy, funkce a řídící struktury jsou do šablon zapisovány obdobně jako proměnné. Pro větší názornost si ukážeme, jak vypadá volání uživatelské funkce (v našem případě funkce math).

<!DOCTYPE HTML PUBLIC „-//W3C//DTD HTML 4.01//EN“ „http://www.w3.org/TR/html4/strict.dtd“>
<html>
<head>
    <title>SMARTY</title>
</head>
<body>
<strong>SMARTY Template Engine</strong><br>
pro x = 12, y = 15:<br>
( x + y ) * 12 =
{math equation=“( x + y ) * 12″ x=12 y=15}
</body>
</html>

Komentáře

Do šablon lze vkládat, kromě standardních HTML komentářů, také komentáře sloužící pro editory šablon, které jsou psány ve tvaru: {* text komentáře *}.

Třída Smarty

Dále si ukážeme základní použití třídy Smarty v PHP skriptech. Prvním krokem je vždy vytvoření nového objektu:

<?php
   define( „SMARTY_DIR“, „/home/web/auto-mobily/“ );
   $smarty = new Smarty();

První klíčovou metodou objektu $smarty je assign( string nazev_promnene_v_sablone, mixed hodnota ), sloužící k předání hodnoty proměnné šabloně. Máme-li tedy v šabloně proměnnou $pole, předáme jí jednoduché pole následujícím způsobem (totéž platí pro normální proměnné, objekty, apod.):

   $smarty->assign( „pole“, array( „první“, „druhá“, „třetí“ ) );

Proměnné nemusíte vždy přiřazovat jen z PHP skriptu, ale můžete je vytvářet i v rámci šablony. K tomuto účelu slouží funkce {assign var="nazev_promenne" value="hodnota"} (více v budoucích článcích, věnovaných funkcím).

Druhou nejpoužívanější metodou třídy Smarty je metoda display( string nazev_sablony ). Standardně jsou šablony specifikovány jménem souboru (např. index.tpl). Tyto šablony jsou následně hledány v adresáři určeném proměnou $templates_dir. Pokud však chceme použít šablonu umístěnou v jiném adresáři, je možné jako parametr metody display předat úplnou cestu k souboru se šablonou, která je uvozena řetězcem file:.

   $smarty->display( „index.tpl“ );
   $smarty->display( „file:C:/webs/myweb/templates/index.tpl“ );
?>

Na závěr tohoto článku bych měl jednu radu. Pokud začnete používat SMARTY, snažte se v šablonách používat spíše asociativní pole než jednotlivé proměnné. Ušetříte si tak práci s přiřazováním hodnot proměnným, přičemž díky syntaxi asociativních polí neztratíte v šabloně přehled.

Odkazy

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

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

Další článek ivanos
Š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 *