SMARTY - chytrΘ Üablony pro PHP
SMARTY znamenß chytr², elegantnφ, pohotov². A p°esn∞ takov² je i stejnojmenn² systΘm Üablon pro PHP, kter² umo₧≥uje vklßdat do HTML k≤du specißlnφ znaky a p°φkazy a odd∞lit tak aplikaΦnφ logiku od prezentace dat. V nßsledujφcφ sΘrii Φlßnk∙ se vßm pokusφm p°iblφ₧it vÜechny zßkladnφ i pokroΦilΘ vlastnosti, kterΘ dßvß SMARTY designΘr∙m a programßtor∙m k dispozici, od jednoduchΘho p°edßvßnφ prom∞nn²ch, zaΦlen∞nφ prezentaΦnφ logiky do HTML Üablon, vytvß°enφ vlastnφch funkci nebo modifikßtor∙, a₧ po spoluprßci s XML a WML.
SMARTY, jak si jeÜt∞ ukß₧eme, mß sice mnoho vlastnostφ, kterΘ z n∞j tvo°φ jeden z nejlepÜφch systΘm∙ Üablon v souΦasnΘ dob∞, nelze o n∞m ale °φci, ₧e se jednß o univerzßln∞ nejlepÜφ systΘm. Nap°φklad rychlost nenφ zrovna tφm, v Φem by SMARTY vynikal. P°i v²b∞ru nejvhodn∞jÜφho systΘmu pro jak²koli projekt je vÜak nutnΘ brßt v ·vahu nejen rychlost, ale i funkΦnost, rozÜi°itelnost, komplexnost, dokumentaci, velikost vytvß°enΘho projektu a dalÜφ vlastnosti, v nich₧ SMARTY vynikß.
Mo₧nß jste se ji₧ s n∞jak²m podobn²m systΘmem Üablon setkali. V Φem se tedy SMARTY od ostatnφch liÜφ? P°edevÜφm je to zp∙sob, jak²m jsou Üablony zpracovßvßny. P°i prvnφm volßnφ (tzn. p°i prvnφm spuÜt∞nφ skriptu, kter² pro sv∙j v²stup Üablonu pou₧φvß) jsou p°evedeny (zkompilovßny) do podoby PHP skriptu, kter² je nßsledn∞ spuÜt∞n a v²sledek odeslßn prohlφ₧eΦi. P°i dalÜφm volßnφ je pak spuÜt∞na jen zkompilovanß verze Üablony.
Nßsledujφcφ k≤d ukazuje jednoduchou Üablonu a jejφ zkompilovanou podobu:
<html>
<head>
<title>SMARTY</title>
</head>
<body>
<strong>SMARTY Template Engine</strong><br>
Dnes je: {$smarty.now|date_format:"%d.%m.%Y"}
</body>
</html>
<?php /* Smarty version 2.5.0, created on 2003-08-19 19:42:42
compiled from example1.tpl */ ?>
<?php $this->_load_plugins(array(
array('modifier', 'date_format', 'example1.tpl', 9, false),)); ?><!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>
Dnes je: <?php echo $this->_run_mod_handler('date_format', true, time(), "%d.%m.%Y"); ?>
</body>
</html>
Vyu₧itφ kompilace v²razn∞ zrychluje odezvu serveru p°i opakovanΘm volßnφ skript∙. Krom∞ toho mß SMARTY takΘ vestav∞nu podporu cache pam∞ti, co₧ p°i pou₧itφ PHP akcelerßtor∙ umo₧≥uje dosßhnout velmi zajφmav²ch v²sledk∙.
DalÜφ v²hodou systΘmu SMARTY je komplexnost a robustnost. Distribuce obsahuje krom∞ zßkladnφch t°φd cca 40 p°eddefinovan²ch modifikßtor∙, filtr∙ a u₧ivatelsk²ch funkcφ (v dalÜφch Φlßncφch si tyto pojmy p°esn∞ vysv∞tlφme), p°iΦem₧ nenφ problΘmem vytvo°it dalÜφ funkce, kterΘ pro sv∙j projekt pot°ebujete.
AplikaΦnφ vs. prezentaΦnφ logika
Velkou v²hodou je jednoduchΘ odd∞lenφ aplikaΦnφ a prezentaΦnφ logiky. Pod aplikaΦnφ logikou si p°edstavme programov² k≤d, kter² se nap°φklad starß o zφskßnφ dat z databßze, v²poΦty, vytvß°enφ session a podobn∞. Z nßzvu je patrnΘ, ₧e tento k≤d by nem∞l mφt nic spoleΦnΘho s prezentacφ dat.
Naopak prezentaΦnφ logika se t²kß jen a pouze prezentovßnφ dat. Jednß se nap°φklad o vytvo°enφ tabulky v zßvislosti na poΦtu pracovnφk∙, alternativnφho textu v p°φpad∞, ₧e ₧ßdnφ zam∞stnanci v danΘm odd∞lenφ momentßln∞ nepracujφ a podobn∞.
Nynφ si polo₧me otßzku proΦ, pokud mßme k dispozici Üablony, prezentaΦnφ logiku vyΦle≥ovat z k≤du HTML strßnky, kdy₧ je m∙₧eme stejn∞ efektivn∞ a p°ehledn∞ zaΦlenit do Üablony strßnek? SMARTY umo₧≥uje za°adit do HTML k≤du strßnky p°φkazy a °φdφcφ struktury znßmΘ z PHP (if, foreach, else, atd.), kterΘ se o prezentaΦnφ logiku postarajφ.
Nev²hody
V²Üe uvedenΘ p°ednosti vÜak v sob∞ skr²vajφ jeden problΘm. Tφm je velikost t°φdy Smarty. Samotn² soubor Smarty.class.php mß 87 Kb. DalÜφ knihovny, pot°ebnΘ pro pou₧φvßnφ systΘmu SMARTY, majφ dohromady 73 Kb. Auto°i, jak vidno, up°ednostnili funkΦnφ rozsah p°ed rychlostφ zpracovßnφ.
Rychlost n∞kter²ch systΘm∙ Üablon m∙₧e p°iblφ₧it nßsledujφcφ benchmark. Ve vÜech uveden²ch testech se SMARTY (v testu byla pou₧ita verze 2.1) umis¥uje na poslednφch mφstech. Zßle₧φ tedy na vßs, zda je pro vßÜ projekt rozhodujφcφ rychlost nebo n∞jakou tu desetinu sekundy o₧elφte.
Pro zajφmavost mohu uvΘst, ₧e svΘho Φasu (p°ibli₧n∞ p°ed rokem) pou₧φvala SMARTY na sv²ch strßnkßch i ╚eskß spo°itelna. O kvalitßch tohoto systΘmu vÜak p°edevÜφm sv∞dΦφ to, ₧e jej pod svß k°φdla vzala komunita v²vojß°∙ PHP. Jeho domovskou strßnku najdete na adrese smarty.php.net, kde si takΘ m∙₧ete stßhnout aktußlnφ verzi.
D°φve ne₧ se pustφme do instalace a nastavenφ SMARTY upozor≥uji, ₧e se nap°φÜt∞ budu v∞novat verzi 2.5, kterß je momentßln∞ nejnov∞jÜφ.
Instalace
Pro spuÜt∞nφ SMARTY budeme pot°ebovat krom∞ zßkladnφho balφku takΘ PHP minimßln∞ ve verzi 4.0.6. Jako p°φklad instalace pou₧ijeme server auto-mobily.cz, kter² je umφst∞n v adresß°i /home/web/auto-mobily.
Po rozbalenφ archivu najdete v adresß°i libs vÜechny pot°ebnΘ soubory. Krom∞ podadresß°e plugins (obsahuje p°eddefinovanΘ funkce, modifikßtory a filtry) zde naleznete takΘ Φty°i soubory:
Soubor | Popis |
---|---|
Smarty.class.php | hlavnφ t°φda, kterou budeme volat ze sv²ch skript∙ |
Smarty_Compiler.class.php | internφ t°φda pro kompilovßnφ Üablon |
Config_File.class.php | internφ t°φda pro Φtenφ konfiguraΦnφch soubor∙ |
debug.tpl | Üablona integrovanΘho debuggeru |
Nejprve p°ekopφrujeme obsah adresß°e libs do adresß°e, ve kterΘm bude v rßmci vaÜeho projektu SMARTY umφst∞no (nap°. /home/web/auto-mobily/smarty). Druh²m krokem je vytvo°enφ nßsledujφcφch adresß°∙:
Adresß° | Popis | P°φklad |
---|---|---|
configs | nepovinn², bude obsahovat konfiguraΦnφ soubory pro Üablony | /home/web/auto-mobily/configs |
templates | bude obsahovat jednotlivΘ Üablony | /home/web/auto-mobily/templates |
templates_c | bude obsahovat zkompilovanΘ Üablony | /home/web/auto-mobily/templates_c |
Adresß°e nemusφ b²t umφst∞ny ve stejnΘm adresß°i jako t°φdy SMARTY (v naÜem p°φpad∞ /home/web/auto-mobily/smarty). VolnΘ ruce mßte takΘ p°i pojmenovßvßnφ adresß°∙. Je pouze d∙le₧itΘ pamatovat na to, aby webov² server m∞l prßva zßpisu do adresß°e obsahujφcφho zkompilovanΘ Üablony.
Poslednφm krokem instalace je ·prava nastavenφ t°φdy Smarty. Jednß se o prom∞nnΘ, urΦujφcφ umφst∞nφ v²Üe vytvo°en²ch adresß°∙ v∙Φi souboru Smarty.class.php. Toto nastavenφ je mo₧nΘ provΘst jednorßzov∞ editacφ souboru Smarty.class.php, nebo p°i ka₧dΘm pou₧itφ t°φdy Smarty. Nßsledujφcφ Φßst k≤du ukazuje, jak by vypadalo nastavenφ t∞chto prom∞nn²ch v naÜem p°φpad∞:
...
/**
* The name of the directory where templates are located.
*
* @var string
*/
var $template_dir = './templates';
/**
* The directory where compiled templates are located.
*
* @var string
*/
var $compile_dir = './templates_c';
/**
* The directory where config files are located.
*
* @var string
*/
var $config_dir = './configs';
/**
* An array of directories searched for plugins.
*
* @var array
*/
var $plugins_dir = array('plugins');
...
VÜimn∞te si, ₧e prom∞nnß $plugins_dir je pole a m∙₧e tak obsahovat vφce adresß°∙ s u₧ivatelsk²mi funkcemi. K tΘto prom∞nnΘ se jeÜt∞ vrßtφme v Φlßnku v∞novanΘm vytvß°enφ vlastnφch funkcφ.
P°ed pou₧itφm Smarty ve skriptu je vhodnΘ nastavit konstantu SMARTY_DIR na kompletnφ cestu k adresß°i, kter² obsahuje cel² systΘm SMARTY. V naÜem p°φpad∞ by hodnota tΘto konstanty m∞la b²t /home/web/auto-mobily/smarty/ (nezapome≥te na poslednφ lomφtko). Nenφ-li tato konstanta urΦena, pokusφ se ji SMARTY vytvo°it automaticky.
Tφm mßme hotovu zßkladnφ instalaci systΘmu SMARTY. Na zßv∞r Φlßnku si ukß₧eme jednoduch² zp∙sob pou₧itφ Üablon. Po spuÜt∞nφ skriptu by se m∞lo zobrazit aktußlnφ datum.
PHP skript:
require_once( "classes/Smarty.class.php" );
$smarty = new Smarty();
$smarty->display( "example1.tpl" );
?>
èablona:
<html>
<head>
<title>SMARTY</title>
</head>
<body>
<strong>SMARTY Template Engine</strong><br>
Dnes je: {$smarty.now|date_format:"%d.%m.%Y"}
</body>
</html>
Odkazy
- smarty.php.net (domovskß strßnka projektu SMARTY)
- smarty.php.net/docs.php (dokumentace k projektu SMARTY)
- www.massassi.com/bTemplate/benchmarks/ (testy n∞kolika Üablonov²ch systΘm∙)
N∞kterΘ dalÜφ systΘmy Üablon
- www.smartphp.net (projekt SmartTemplates)
- www.massassi.com/bTemplate/ (projekt bTemplate)
- www.thewebmasters.net/php/FastTemplate.phtml (projekt FastTemplates)
- freshmeat.net/projects/modelixe/ (projekt Modelixe)