Kapitola 4. Šablony se Smarty



Podobné dokumenty
PHP PHP je skriptovací programovací jazyk dynamických internetových stránek PHP je nezávislý na platformě

PHP tutoriál (základy PHP snadno a rychle)

1 Webový server, instalace PHP a MySQL 13

Hlavní funkce pro práci s řetězci

Instalace a konfigurace web serveru. WA1 Martin Klíma

X36WWW. Vícevrstvá architektura webové aplikace Martin Klíma. Tvorba Webu 2 1

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

1. Webový server, instalace PHP a MySQL 13

Ovladač Fiery Driver pro systém Mac OS

Redakční systém Joomla. Prokop Zelený

Amos Software Jednoznakové předložky. Co je modul Jednoznakové předložky. Instalace. Zkušební režim. Odemknutí plné funkčnosti

Pro označení disku se používají písmena velké abecedy, za nimiž následuje dvojtečka.

KAPITOLA 3 - ZPRACOVÁNÍ TEXTU

Střední odborná škola a Střední odborné učiliště, Hořovice

Základní příkazy pro práci se soubory

(X)HTML-TAGY. VOŠ a SŠT Česká Třebová

Amos Software Jednoznakové předložky. Co je modul Jednoznakové předložky. Instalace. Postup pro operační systém Windows:

HLEDEJCENY.mobi. Obsah. Mobilní verze e-shopu. Důvody instalace

Základní příkazy OS UNIX

Bezdrátové routery LTE & UMTS datové a hlasové brány

DUM 06 téma: Tvorba makra pomocí VBA

Django Urls, views, templates

Postup. Úvodem. Hlavní myšlenka frameworku. application. system. assets. uploads

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Základní příkazy UNIXu (Linuxu)

PROGRAMOVÁNÍ V SHELLU

Aplikační vrstva. Úvod do Php. Ing. Martin Dostal

Regulární výrazy. Vzory

Šablonovací systém htmltmpl vypracoval: Michal Vajbar, Šablonovací systém htmltmpl

1 Návod na instalaci prostředí LeJOS-NXJ a přehrání firmwaru NXT kostky

Mobilní aplikace Novell Filr Stručný úvod

Úvodem 9. Zpětná vazba od čtenářů 10 Zdrojové kódy ke knize 10 Errata 10. Než začneme 11

SharePoint Online. Vyhledávání Můžete hledat weby, osoby nebo soubory. Vytvoření webu nebo příspěvku

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

M4 PDF rozšíření. Modul pro PrestaShop.

Střední odborná škola a Střední odborné učiliště, Hořovice

Aplikace BSMS. Uživatelská příručka - 1 -

Funkce Chytrý dotyk. verze 1.4. A-61629_cs

24. XML. Aby se dokument XML vůbec zobrazil musí být well-formed (správně strukturovaný). To znamená, že splňuje formální požadavky specifikace XML.

Sada 1 - PHP. 03. Proměnné, konstanty

INOVACE PŘEDMĚTŮ ICT. MODUL 11: PROGRAMOVÁNÍ WEBOVÝCH APLIKLACÍ Metodika

Současný svět Projekt č. CZ.2.17/3.1.00/32038, podpořený Evropským sociálním fondem v rámci Operačního programu Praha adaptabilita

MODERNÍ WEB SNADNO A RYCHLE

Přednáška 2. Systémy souborů OS UNIX. Nástroje pro práci se souborovým systémem. Úvod do Operačních Systémů Přednáška 2

PŘÍRUČKA. Správa obsahu webové prezentace. Formátování textu

Úvod do systému

rychlý vývoj webových aplikací nezávislých na platformě Jiří Kosek

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

MATLABLINK - VZDÁLENÉ OVLÁDÁNÍ A MONITOROVÁNÍ TECHNOLOGICKÝCH PROCESŮ

Ing. R. Kunstová,

Střední odborná škola a Střední odborné učiliště, Hořovice

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

v. 2425a Jak si na PC vypěstovat HTTP (WWW, Web) server a jak ho používat (snadno a rychle) by: Ing. Jan Steringa

1. Umístěte kurzor do sloupce Datový typ na řádek s polem, ve kterém vytvořit chcete seznam.

17. července :51 z moravec@yahoo.com

Django. Webový framework pro Python Projekt = webová stránka Aplikace = určitá funkcionalita webu

Tvorba webových stránek

Kreslení 2D technické dokumentace. AutoCAD styl textu. Ing. Richard Strnka, 2012

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

Aplikace generátor identifikátorů UFI. Uživatelská příručka

Microsoft Office Word 2003

Souhrn výukových materiálů ke kurzu: Tvorba výukových materiálů pomocí tabletu (B3.6)

C2110 Operační systém UNIX a základy programování

Reliance 3 design OBSAH

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Individuální nastavení počítače

Implementace LMS MOODLE. na Windows 2003 Server a IIS 6.0

Použití Office 365 na iphonu nebo ipadu

Postup instalace softwaru Creo3:

24 Uživatelské výběry

Použití Office 365 na telefonu s Androidem

Dokumentace. k modulu. podnikový informační systém (ERP) Datové schránky

IntraVUE Co je nového

Algoritmizace a programování

HTML - Úvod. Zpracoval: Petr Lasák

WNC::WebNucleatCreator

ABC Linux běží z CD české prostředí tištěná příručka obsah portálu Mutt Jak začít? Jan Fuchs

MySQLi (objektově) Příklad vytvoření instance třídy včetně parametrů pro připojení: $mysqli = new mysqli('localhost', 'login', 'heslo', 'databaze');

KAPITOLA 3. Architektura aplikací na frameworku Rails. V této kapitole: modely, pohledy, řadiče.

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z

Používání u a Internetu

NÁVOD NA OBSLUHU INTERNETOVÉ PREZENTACE. Ataxo Czech s.r.o.

PHP framework Nette. Kapitola Úvod. 1.2 Architektura Nette

s anténou a podstavcem CD-ROM obsahující návod a informace o záruce Ethernetový kabel (CAT5 UTP nekřížený) ADSL kabel (standardní telefonní kabel)

8 Makra Příklad 4 Excel 2007

APS Administrator.ST

Příprava prostředí pro výuku PHP a MySQL

SOU Valašské Klobouky. VY_32_INOVACE_3_09 IKT PowerPoint Vlozeni_videa Mgr. Radomír Soural. Zkvalitnění výuky prostřednictvím ICT

3 Makra Příklad 4 Access Ve vytvořené databázi potřebuje sekretářka společnosti Naše zahrada zautomatizovat některé úkony pomocí maker.

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

CMSSS manuál k použití

Co je nového v SolidWorks Enterprise PDM 2009

Microsoft Outlook 2013 vypadá jinak než ve starších verzích, proto jsme vytvořili tuto příručku, která vám pomůže se s ním rychle seznámit.

Prezentace. Prezentace. 5. InDesign vzory, znakové styly. Vytvořil: Tomáš Fabián vytvořeno

VYHLEDÁVACÍ BANNER PRO WEBOVÉ STRÁNKY

EPLAN Electric P8 2.7 s databázemi na SQL serveru

Obsah. Rozdíly mezi systémy Joomla 1.0 a Systém Joomla coby jednička online komunity...16 Shrnutí...16

PŘÍKAZY PRÁCE SE SOUBORY

Moje Cisco Nejčastější dotazy

Šifrování Autentizace Bezpečnostní slabiny. Bezpečnost. Lenka Kosková Třísková, NTI TUL. 22. března 2013

Transkript:

Kapitola 4 Šablony se Smarty V mnoha ohledech je i samotné PHP strojem na šablony. Text, který se nachází vně značek <?php a?>, se zobrazí nezměněný, příkazy uvnitř těchto značek se rozloží a vykonají. Stránka PHP, která zobrazuje statické záhlaví, získá několik řádků z nějaké databáze, naformátuje je do tabulky HTML, a nakonec zobrazí statické zápatí, vlastně do statické šablony zapojuje dynamická data. Mít specializovaný stroj na šablony, jakým je Smarty, je cenné, protože vynucuje disciplinované oddělování prezentační logiky od logiky aplikace. Přestože můžete budovat stránky šablon čistě jen s PHP, je obtížné zabránit programátorům a designérům stránek, aby si navzájem nelezli do zelí, když je vaším jazykem šablon PHP. Se Smarty se vám snadněji podaří uskutečnit, aby se designéři soustřeďovali jen na implementaci rozvržení a prezentační logiky, a programátoři aby se zase soustředili jen na implementaci logiky aplikace v separátních třídách a funkcích PHP. Taková separace je prospěšná z mnoha důvodů, nejen kvůli zlepšení pracovní disciplíny. Web založený na šablonách je flexibilní web: chcete-li aktualizovat design webu, stačí změnit šablony. Klíčová logika, která zobrazuje články, prohledává databáze, či zobrazuje nějaký katalog výrobků, zůstane netknutá; mění se ale vzhled výsledků. Z toho plyne, že šablony také značně ulehčují proces vytváření mnoha rozhraní pro stejný obsah. Lze rozmisťovat jedinečná rozhraní pro různé prohlížeče, různé jazyky, nebo různé obchodní partnery. Každý prohlížeč, jazyk, či partner, získá svou vlastní sadu šablon, ale všechna rozhraní budou sdílet touž aplikační logiku. Většina textu kapitoly podrobně vysvětluje, jak se za pomoci Smarty vybuduje web založený na šablonách. Prozkoumáme ale také caching šablon, což přináší další zisky, když pracujete se Smarty. Výkon webu se zvyšuje tím, že se ukládají statické kopie neměněných dynamických informací. Například zobrazíte-li na své průčelní stránce novinové titulky, přičemž se váš kanál (feed) s titulky mění jen každých 15 minut, není třeba vytahovat titulky z kanálu pokaždé, když generujete svou průčelní stránku. Pomocí těchto schopností Smarty si můžete uchovat kopii titulků po dobu 15 minut do cache a automaticky přebudovávat seznam titulků teprve tehdy, až to bude nutné.

108 Kapitola 4 Šablony se Smarty Instalace a konfigurace Smarty Smarty nainstalujete a nakonfigurujete ve čtyřech krocích: 1. Stáhněte distribuci a rozbalte ji. 2. Zkopírujte soubory knihovny z distribuce do svého cílového adresáře. 3. Vytvořte adresáře pro šablony, kompilované šablony a pro cache stránek. 4. Určete správný způsob, jakým se bude vyvolávat Smarty z vašich skriptů PHP. Smarty získáte tak, že navštívíte http://smarty.php.net/download.php, a pomocí patřičného odkazu přejdete na stránku, odkud si můžete stáhnout zdrojový kód Smarty. V kapitole se popisuje Smarty verze 2.6.0. Smarty se distribuuje jako soubor tar.gz, takže rozbalte archiv a extrahujte soubory takto: % gunzip -c Smarty-2.6.0.tar.gz tar xf - Pracujete-li na Windows, můžete soubory tar.gz zpracovávat vhodnou utilitou, jakou je například program WinZip. V dalším kroku je třeba zkopírovat jisté soubory z distribuce Smarty do jistého cílového adresáře. Adresář by měl být vně stromu dokumentů vašeho webu. Jestliže cílový adresář není na vaší vkládací cestě PHP (include_path), musíte nastavit konstantu SMARTY_DIR na název adresáře, včetně koncového lomítka. V kapitole používáme jako cílový adresář /usr/lib/php/smarty, můžete však použít libovolný adresář, podmínkou ale je, aby uživatel, pod kterým běží webový server, měl oprávnění z tohoto adresáře číst. Jestliže cílový adresář ještě neexistuje, vytvořte ho, a zkopírujte tam vše, co se nachází v podadresáři libs distribuce Smarty: # mkdir -p /usr/lib/php/smarty # cp -pr Smarty-2.6.0/libs/* /usr/lib/php/smarty Až soubory zkopírujete, budete muset připravit několik adresářů, a zkontrolovat, zda mají nastavena správná povolení. Adresáře se musejí vytvořit pro šablony, konfigurační soubory, kompilované šablony a pro cache stránek. Do adresářů pro kompilované šablony a cache stránek musí mít povoleno zapisovat ten uživatel, pod kterým běží váš webový server. Do adresářů pro šablony a konfigurační soubory musí mít povoleno zapisovat kterýkoli uživatel, který má mít oprávnění editovat nějakou šablonu či konfigurační soubor tedy editoři a designéři vašeho webu. Adresář pro šablony pojmenujeme templates: # mkdir /usr/lib/php/smarty/templates Adresář pro konfigurační soubory pojmenujeme configs: # mkdir /usr/lib/php/smarty/configs Adresář pro kompilované šablony pojmenujeme templates_c: # mkdir /usr/lib/php/smarty/templates_c Adresář pro cache stránek pojmenujeme cache:

PHP 5 moduly, rozšíření a akcelerátory 109 # mkdir /usr/lib/php/smarty/cache Řádně se nastaví povolení pro adresáře templates_c a cache nejsnadněji tak, že jakožto superuser změníte vlastníka adresářů na toho uživatele, pod kterým běží váš webový server: # chown nobody /usr/lib/php/smarty/templates_c # chown nobody /usr/lib/php/smarty/cache Uživatel, pod kterým běží webový server, musí mít možnost do těchto adresářů zapisovat, protože když Smarty běží, ukládá do nich soubory. Pak změňte patřičně povolení pro adresáře templates a configs. Patří-li všichni designéři například do skupiny siteedit, vykonejte tyto příkazy: # chgrp siteedit /usr/lib/php/smarty/configs # chgrp siteedit /usr/lib/php/smarty/templates # chmod g+w /usr/lib/php/smarty/configs # chmod g+w /usr/lib/php/smarty/templates Tím změníte skupinu adresářů configs a templates na siteedit a povolíte všem uživatelům, kteří jsou členy skupiny siteedit, aby mohli do těchto adresářů zapisovat. Jestliže jste vytvořili adresáře správně, měl by výpis vašich připravených adresářů vypadat podobně jako následující (časy modifikace souborů jsem vynechal, aby byly řádky kratší): drwxr-xr-x 2 nobody root 4096 cache -rw-rw-r-- 1 sklar wheel 9946 Config_File.class.php drwxrwxr-x 2 root siteedit 4096 configs drwxrwsr-x 2 sklar wheel 4096 core -rw-rw-r-- 1 sklar wheel 5017 debug.tpl drwxrwsr-x 2 sklar wheel 4096 plugins -rw-rw-r-- 1 sklar wheel 65531 Smarty.class.php -rw-rw-r-- 1 sklar wheel 76885 Smarty_Compiler.class.php drwxrwxr-x 2 root siteedit 4096 templates drwxr-xr-x 2 nobody root 4096 templates_c Adresáře cache a templates_c vlastní nobody a pouze ten uživatel do nich může zapisovat. Do adresářů configs a templates může zapisovat kdokoli ze skupiny siteedit. Zbývající soubory a adresáře mohou číst všichni uživatelé. Posledním krokem v přípravě Smarty je určit správné hodnoty pro konfigurační nastavení Smarty. Veškerá interakce se Smarty se ve skriptech PHP děje prostřednictvím objektu, který je instancí třídy Smarty definované v souboru Smarty.class.php. Jakmile máte instanci objektu Smarty, musí se některé jeho vlastnosti nastavit tak, aby ukazovaly na adresáře, které jste si vytvořili: define('smarty_dir','/usr/lib/php/smarty/'); require SMARTY_DIR.'Smarty.class.php'; $smarty = new Smarty; $smarty->template_dir = SMARTY_DIR.'templates/';

110 Kapitola 4 Šablony se Smarty $smarty->compile_dir = SMARTY_DIR.'templates_c/'; $smarty->config_dir = SMARTY_DIR.'configs/'; $smarty->cache_dir = SMARTY_DIR.'cache/'; Jakmile máte instanci objektu Smarty a nastavili jste jeho vlastnosti uvedené výše, můžete začít komunikovat prostřednictvím $smarty. Nastavovat proměnné a vyvolávat šablony tak, jak se popisuje ve zbytku kapitoly. Přestože žádný z příkladů neobsahuje tyto úvodní řádky, předpokládá se, že běží v nějakém skriptu, jehož úvodní část byla připravená výše uvedeným postupem. Základní pojmy Smarty Šablona Smarty je něco jako kulisa kosmonauta nebo topmodelky v životní velikosti, která má díru na místě, kde by měl hlavu skutečný kosmonaut, resp. topmodelka, takže se můžete dát vyfotit v roli kosmonauta nebo topmodelky, když dírou prostrčíte svou hlavu. Na každé fotografii bude většina obrázku stejná. Jen zubící se obličej prostrčený dírou bude jiný. Šablona obsahuje prezentované informace, které se nemění, jako jsou záhlaví, nabídky, nebo zápatí. Když budujete nějakou stránku založenou na šabloně, přidá Smarty do šablony něco dynamických dat, která jsou specifická pro daný požadavek prostrčí dírou konkrétní zubící se obličej. Všeobecně se jedná o tři kroky, když chcete v nějakém skriptu PHP zprovoznit Smarty: Vytvoří se instance objektu Smarty (to jsme podrobně popsali v předchozím oddílu), přiřadí se proměnné objektu Smarty a zobrazí se šablona. Proměnné přiřazené objektu Smarty do šablony se vsunou, když se šablona zobrazuje. Výpis 4-1 je taková šablona. Zobrazuje informace o jedné z příchutí zmrzliny. Přijde do podadresáře templates SMARTY_DIR. V šabloně je definované formátování informací, podobnosti o příchuti se ale objektu Smarty přiřazují vně šablony. Výpis 4-1. icecream.tpl. <html> <head><title>zmrzlina: {$flavor}</title></head> <body> <h1>{$flavor}</h1> <table border="1"> <tr><th colspan="2">příchuť {$flavor}</th></tr> <tr><td>počet kalorií</td><td>{$calories}</td></tr> <tr><td>cena</td><td>${$price}</td></tr> </table> </body> </html> V šabloně indikují složené závorky, že se jedná o příkazy a funkce Smarty. Nejzákladnějším příkazem je vložit hodnotu proměnné. Když dáte název proměnné do složených závorek, způsobí to, že když se šablona zobrazuje, dosadí se místo proměnné její hodnota. Chcete-li zobrazit nějaké informace o čo-

PHP 5 moduly, rozšíření a akcelerátory 111 koládové zmrzlině, vyvolejte icecream.tpl ve skriptu PHP z výpisu 4-2. Skript by měl být uložen ve stromu dokumentů webového serveru. Výpis 4-2. chocolate.php. $smarty->assign('flavor','chocolate'); $smarty->assign('calories',10); $smarty->assign('price',4.55); $smarty->display('icecream.tpl'); Tři volání $smarty->assign() přiřazují v objektu $smarty konkrétní hodnoty proměnným šablony s názvy flavor, calories a price. Voláním $smarty->display('icecream.tpl') sdělujete objektu $smarty, aby načetl šablonu uloženou v souboru icecream.tpl, vykonal všechny příkazy, které v šabloně najde, a zobrazil výsledky. V našem případě se vykonávání příkazů skládá jen z dosazení hodnot několika proměnných. Výsledkem je tento HTML: <html> <head><title>zmrzlina: Chocolate</title></head> <body> <h1>chocolate</h1> <table border="1"> <tr><th colspan="2">příchuť Chocolate</th></tr> <tr><td>počet kalorií</td><td>10</td></tr> <tr><td>cena</td><td>$4.55</td></tr> </table> </body> </html> Prospěšnost a síla šablonového stroje se ozřejmí, až nastane chvíle, kdy máte zobrazit stránku o vanilkové zmrzlině. Takovou stránku vytváří výpis 4-3. Stránka má stejné rozvržení jako stránka pro čokoládovou zmrzlinu. Výpis 4-3. vanilla.php. $smarty->assign('flavor','vanilla'); $smarty->assign('calories',20); $smarty->assign('price',4.25); $smarty->display('icecream.tpl'); Zobrazí se prakticky identická stránka jediným rozdílem jsou jiné dosazené hodnoty. Až dostanete za úkol změnit rozvržení stránky prezentující informace o různých příchutích zmrzlin, bude stačit aktualizovat jen soubor icecream.tpl. Skripty PHP, které vyvolávají šablonu, budou těžit ze změněné šablony, aniž byste v nich museli cokoli měnit.

112 Kapitola 4 Šablony se Smarty Používání proměnných v šabloně Jádrem systému šablon je dosazování hodnot za proměnné. Když zkombinujete různé sady proměnných s různými šablonami, můžete vyprodukovat celou paletu různých stránek. Aplikování stejných proměnných na různé šablony je běžné, když zobrazujete výstup na různých platformách nebo v různých prohlížečích. Představte si například, že nějaký web, který prezentuje novinové články, má svůj obsah přizpůsobit podle druhu prohlížeče a připojení čtenáře. Web bude mít jednu šablonu pro webové prohlížeče na vysokorychlostních připojeních, jednu pro webové prohlížeče s nízkou rychlostí, a jednu pro mobilní zařízení, jako jsou mobily a organizéry. Když vznikne požadavek na nějaký článek, shromáždí web z databáze nebo z nějakého souboru patřičná data článku, tedy titulek, podtitulek, tělo a URL obrázků. Pak, v závislosti na tom, jaký prohlížeč o článek žádal, vyvolá web odpovídající šablonu Smarty. Každá šablona naformátuje data článku jinak. Například šablona pro vysokorychlostní připojení bude obsahovat všechny obrázky, kdežto šablona pro mobilní zařízení všechny obrázky vyhodí a zobrazí jen holý text. Když web novin zobrazuje různé články na stejném druhu prohlížeče, používá různé sady proměnných a jedinou šablonu. Když nějaký konkrétní článek požaduje prohlížeč s vysokorychlostním připojením, získají se data článku a vstrčí do šablony článků určené pro vysokorychlostní připojení. Když se pak požaduje jiný článek, získají se jiná data a vstrčí do téže šablony. Jednotlivé články lze editovat, aniž by to mělo na šablonu nějaký vliv. Šablonu můžete zase editovat, aniž byste tím nějak změnili data nějakého konkrétního článku. Šablonová struktura odděluje obsah webu (články) od vzhledu a rozvržení webu. Jak jsme si ukázali v předchozím oddílu, přiřazuje metoda assign() hodnoty proměnným šablony, a metoda display() zobrazuje šablonu. Místo jednotlivých dvojic název/hodnota, přijímá assign() jako argument také asociativní pole. Klíče prvků asociativního pole použije jako názvy proměnných šablony, hodnoty prvků jako hodnoty proměnných šablony. Stránku pro vanilkovou zmrzlinu můžete například vytvořit také takto: $smarty->assign(array('flavor' => 'Vanilla', 'calories' => 20, 'price' => 4.25)); $smarty->display('icecream.tpl'); Proměnné požadavku Smarty zpřístupňuje proměnné požadavku prostřednictvím prvků speciální proměnné $smarty. Proměnné GET jsou ve $smarty.get, proměnné POST ve $smarty.post, proměnné cookie ve $smarty.cookies, proměnné prostředí ve $smarty.env, serverové proměnné ve $smarty.server a proměnné sezení ve $smarty.session. Má-li konfigurační proměnná request_use_auto_ globals Smarty hodnotu true, získává Smarty proměnné požadavku ze superglobálních polí: $_GET, $_POST, $_COOKIE, $_ENV, $_SERVER a $_SESSION. Jinak bude používat starší globální pole: $HTTP_ GET_VARS, $HTTP_POST_VARS, $HTTP_COOKIE_VARS, $HTTP_ENV_VARS, $HTTP_SERVER_VARS a $HTTP_SESSION_VARS. Bez ohledu na to, zda je request_use_auto_globals nastavena na true nebo ne, zpřístupňuje Smarty prvky superglobálního pole $_REQUEST v $smarty.request.

Modifikátory proměnných PHP 5 moduly, rozšíření a akcelerátory 113 Často je třeba nahradit proměnné mírně upravenými hodnotami. V těchto případech přicházejí na scénu modifikátory. Modifikátory proměnných jsou drobné funkce s omezeným rozsahem působnosti, které produkují nový výsledek založený na nějaké proměnné. Nemění původní proměnnou, dodají její novou verzi se samými velkými písmeny, nebo obsahující počet znaků proměnné, nebo jinak naformátovanou. Modifikátor se používá tak, že se za název proměnné přidá a název modifikátoru. Smarty nijak nekóduje entity, a ani nijak jinak nemění proměnné požadavku, takže musíte být velmi opatrní, abyste zamezili útokům z jiných skriptů, a jiným nežádoucím jevům, k nimž by mohlo docházet v důsledku toho, že nekontrolujete vstupy od uživatelů. Odeslaná data zobrazíte bezpečně tak, že uvedete modifikátor escape. Například, má-li $_REQUEST['link'] hodnotu <a href="/chocolate.php">ňam ňam!</a>, pak: {$smarty.request.link escape} zobrazí hodnotu $_REQUEST['link'] se zakódovanými entitami HTML: <a href="/chocolate.php">ňam ňam!</a> Některé modifikátory proměnných přebírají argumenty. Uvádějí se jako seznam oddělovaný dvojtečkami za názvem modifikátoru. Například modifikátor cat přidá nakonec proměnné řetězec. Připojovaný řetězec se uvede jako argument: {$flavor cat:" Fudge"} Jestliže se do proměnné $flavor šablony dosadila hodnota Vanilla, zobrazí šablona: Vanilla Fudge Modifikátory proměnné se také dají řetězit. Chcete-li výstup jednoho modifikátoru zpracovat jiným modifikátorem, umístěte za první modifikátor znak a druhý modifikátor: {$flavor cat:" Fudge" upper} Jestliže se do proměnné $flavor šablony dosadila hodnota Vanilla, zobrazí šablona tohle: VANILLA FUDGE Zpracování textu Příklady předvádějící modifikátory pro zpracování textu se opírají o následující přiřazené proměnné: $smarty->assign(array('flavor' => 'Chocolate Smoked Oyster', 'quote' => 'Každý říká, "Mám rád Chocolate smoked oyster!"', 'quote2' => "Je to moje nejoblíbenější příchuť!", 'price' => 5, 'spaced_flavor' => " Chocolate Smoked\n\nOyster", 'link' => '<a href="ustrice.php">ústřice</a>', 'address' => 'oyster@example.com', 'description' => 'Smícháním zemitosti uzených ústřic a čokolády s vysokým obsahem kakaa

114 Kapitola 4 Šablony se Smarty vykouzlí zmrzlina Chocolate Smoked Oyster simultánně pocity parné tropické džungle, ve které dozrávají kakaové boby, a čerstvého povětří Nové Anglie, kde jsou domovem ústřice.')); Některé z modifikátorů Smarty pro zpracování textu se podobají zabudovaným funkcím PHP. Vztahy mezi modifikátory pro zpracování textu a funkcemi PHP jsou vypsané v tabulce 4-1. Tabulka 4-1. Modifikátory Smarty pro zpracování textu a ekvivalenty z PHP. Funkce nebo operátor PHP Modifikátor Popis ucwords() capitalize Převede první písmeno v každém slově na velké.. (operátor řetězení řetězců) cat Zkombinuje dva řetězce. htmlspecialchars() escape Předznačí apostrofy, úhlové závorky a ampersandy. htmlentities() escape Předznačí všechny entity HTML. urlencode() escape Předznačí hexadecimálně všechny znaky, které nejsou alfanumerické (kromě _). strtolower() lower Převede všechna písmena v řetězci na malá. nl2br() nl2br Převede znaky nového řádku (newline) na značky <br />. str_replace() replace Nahrazuje v řetězci. preg_replace() regex_replace Nahradí řetězec, který vyhovuje regulárnímu výrazu. sprintf() string_format Vytiskne naformátovaný řetězec. strtoupper() upper Převede všechna písmena v řetězci na velká. wordwrap() wordwrap Vloží do řetězce znaky pro nový řádek, aby se zalamoval na určité délce. capitalize Modifikátor capitalize převede první písmeno ve všech slovech proměnné na velké. Například: {$quote capitalize} Výstup ukázky je: Každý Říká, "Mám Rád Chocolate Smoked Oyster!" cat Modifikátor cat připojí na konec proměnné zadaný řetězec. Například: {$flavor cat:" Sauce"} Výstup ukázky je: Chocolate Smoked Oyster Sauce

PHP 5 moduly, rozšíření a akcelerátory 115 escape Modifikátor escape předznačí speciální znaky v proměnné. Parametr předaný do escape určuje, jaké předznačování se bude dít. Standardně, nebo s parametrem html, se předznačují znaky <, >, &, " a '. S parametrem quotes se předznačují apostrofy. S parametrem htmlall se předznačují všechny entity HTML. S parametrem url se speciální znaky zakódují jako v URL. S parametrem javascript se předznačují apostrofy, obrácená lomítka a znaky pro nový řádek (newline). S parametrem hex se každý znak převede na hexadecimální vyjádření jako v URL. S parametrem hexentity se každý znak převede na hexadecimální vyjádření jako v kódování entit. Tím se dají trochu zamaskovat e-mailové adresy před lovícími roboty. Ukázky: {* První dvě jsou stejné *} {$link escape} {$link escape:"html"} {$quote2 escape:"quotes"} {$link escape:"htmlall"} {$quote escape:"url"} {$quote2 escape:"javascript"} {$flavor escape:"hex"} {$address escape:"hexentity"} Výstup z ukázek: <a href="ustrice.php">ústřice</a> <a href="ustrice.php">ústřice</a> Moje nejoblíbenější příchuť, \'si piš! <a href="ustrice.php">ústřice</a> Každý+říká%2C+%22Mám+rád+Chocolate+smoked+oyster%21%22 Moje nejoblíbenější příchuť, \'si piš! %43%68%6f%63%6f%6c%61%74%65%20%53%6d%6f%6b% 65%64%20%4f%79%73%74%65%72 oyster@exampl e.com indent Modifikátor indent odsadí řetězec při každém přechodu na nový řádek. (Nevloží konce řádků do řetězce.) Standardně indent odsazuje pomocí čtyř mezer. Jako první parametr můžete specifikovat, kolik znaků se má vložit. Jako druhý parametr můžete uvést jiný znak, nechcete-li odsazovat pomocí mezer. Ukázky použití: {$description indent} {$description indent:2} {$description indent:2:"-"}

116 Kapitola 4 Šablony se Smarty Výstup ukázek: Smícháním zemitosti uzených ústřic a čokolády s vysokým obsahem kakaa vykouzlí zmrzlina Chocolate Smoked Oyster simultánně pocity parné tropické džungle, ve které dozrávají kakaové boby, a čerstvého povětří Nové Anglie, kde jsou domovem ústřice. Smícháním zemitosti uzených ústřic a čokolády s vysokým obsahem kakaa vykouzlí zmrzlina Chocolate Smoked Oyster simultánně pocity parné tropické džungle, ve které dozrávají kakaové boby, a čerstvého povětří Nové Anglie, kde jsou domovem ústřice. --Smícháním zemitosti uzených ústřic a čokolády s vysokým obsahem kakaa --vykouzlí zmrzlina Chocolate Smoked Oyster simultánně pocity --parné tropické džungle, ve které dozrávají kakaové boby, --a čerstvého povětří Nové Anglie, kde jsou domovem ústřice. lower Modifikátor lower převede všechna písmena v proměnné na malá. Například: {$flavor lower} Výstup ukázky bude: chocolate smoked oyster nl2br Modifikátor nl2br přidá značku <br /> před každý znak newline v řetězci. Hodí se to pro zachování pevných konců řádků v textovém souboru, když se zobrazuje jako HTML. {$description nl2br} Výstup ukázky bude: Smícháním zemitosti uzených ústřic a čokolády s vysokým obsahem kakaa<br /> vykouzlí zmrzlina Chocolate Smoked Oyster simultánně pocity<br /> parné tropické džungle, ve které dozrávají kakaové boby, <br /> a čerstvého povětří Nové Anglie, kde jsou domovem ústřice. regex_replace Modifikátor regex_replace nahradí ten text v proměnné, který vyhovuje zadanému regulárnímu výrazu. Používá funkci preg_replace() PHP, takže se mu musí dodat regulární výraz kompatibilní s Perlem. Prvním parametrem regex_replace je regulární výraz, včetně oddělovačů, podle kterého se hledá. Druhý parametr je řetězec, kterým se nahradí text vyhovující regulárnímu výrazu.

PHP 5 moduly, rozšíření a akcelerátory 117 {$flavor regex_replace:"/[aeiou]/":"*"} Výstup ukázky je: Ch*c*l*t* Sm*k*d Oyst*r replace Modifikátor replace nahrazuje v proměnné pomocí funkce str_replace() PHP jeden řetězec jiným řetězcem. První parametr je řetězec, který se hledá. Druhý parametr je řetězec, který nahradí nalezené výskyty prvního řetězce. {$flavor replace:"e":"3"} Výstup z ukázky je: Chocolat3 Smok3d Oyst3r spacify Modifikátor spacify oddělí znaky v proměnné mezerou. Jako parametr můžete předat jiný oddělující znak. Ukázky použití: {$flavor spacify} {$flavor spacify:"-"} Výstup z ukázek je: C h o c o l a t e S m o k e d O y s t e r C-h-o-c-o-l-a-t-e- -S-m-o-k-e-d- -O-y-s-t-e-r string_format Modifikátor string_format formátuje řetězec pomocí funkce sprintf() PHP. Formát předejte jako parametr. {$price string_format:"%.2f"} Výstup ukázky: 5.00

118 Kapitola 4 Šablony se Smarty strip Modifikátor strip převede všechny posloupnosti prázdných znaků v řetězci na jedinou mezeru. Každá skupina znaků tab, newline, nebo mezer se převede na jedinou mezeru. Předáte-li jako parametr nějaký řetězec, budou se prázdné znaky nahrazovat jím. Ukázky použití: {$spaced_flavor strip} {$spaced_flavor strip:" "} Výstup z ukázek: Chocolate Smoked Oyster Chocolate Smoked Oyster strip_tags Modifikátor strip_tags odstraní z řetězce značky HTML. {$link strip_tags} Výstup z ukázky: Ústřice truncate Modifikátor truncate zkrátí řetězec na 80 znaků. Jestliže nějaké znaky z řetězce odřízne, přidá na konci řetězce tři tečky, které indikují, že byl řetězec zkrácen. Jako první parametr můžete zadat jinou délku, na kterou se zkracuje, a jako druhý parametr jiný indikátor zkrácení. Standardně truncate nedělí slova, když řetězec zkracuje. Chcete-li, aby uřezával i uprostřed slov, předejte jako třetí parametr true. {$description truncate} {$description truncate:40} {$description truncate:40:"! "} {$description truncate:40:"! ":true} Výstup z ukázek: Smícháním zemitosti uzených ústřic a čokolády s vysokým obsahem... Smícháním zemitosti uzených... Smícháním zemitosti uzených! Smícháním zemitosti uzených úst!

PHP 5 moduly, rozšíření a akcelerátory 119 upper Modifikátor upper převede všechna písmena v proměnné na velká. {$flavor upper} Výstup ukázky: CHOCOLATE SMOKED OYSTER wordwrap Modifikátor wordwrap vloží do řetězce konce řádků, takže žádný řádek nebude příliš dlouhý. Standardně zalamuje řetězec na 80 znaků, jako znak konce řádku použije \n, a nekončí řádek uprostřed slova. Přijímá jako první parametr délku řádků, a jako druhý parametr řetězec pro konec řádků. Ukázky použití: {$description wordwrap} {$quote wordwrap:20} {$quote wordwrap:20:"\n\n"} Výstup z ukázek: Smícháním zemitosti uzených ústřic a čokolády s vysokým obsahem kakaa vykouzlí zmrzlina Chocolate Smoked Oyster simultánně pocity parné tropické džungle, ve které dozrávají kakaové boby, a čerstvého povětří Nové Anglie, kde jsou domovem ústřice. Každý říká, "Mám rád Chocolate smoked oyster!" Každý říká, "Mám rád Chocolate smoked oyster!" Počty znaků, slov, vět a odstavců textu Jedná se o modifikátory, které poskytují statistiky o délce proměnné, což se hodí, když potřebujete vypočítávat nějaké zobrazovací parametry. V příkladech se používá proměnná s následujícím obsahem: $smarty->assign('dobrozdani',"tohle je nejlepší zmrzlina na světě a okolí. Nikdy jsem nejedl nic, co by chutnalo tak kouřově, čokoládově a ústřicově. Je vám tedy jasné, že schlamstnu denně dva poháry!"); count_characters Modifikátor count_characters oznámí počet znaků v proměnné, kromě prázdných znaků. Chcete- -li započítat i prázdné znaky, předejte jako parametr true.

120 Kapitola 4 Šablony se Smarty Ukázky použití: {$dobrozdani count_characters} {$dobrozdani count_characters:true} Výstup ukázek: 160 188 count_words Modifikátor count_words oznámí počet slov v proměnné. Slova jsou pro něj podřetězce oddělené prázdným znakem, které obsahují alfanumerické znaky. Řetězec 2 plus 2 obsahuje tři slova; řetězec 2 + 2 má dvě slova. {$dobrozdani count_words} Výstup ukázky: 29 count_sentences Modifikátor count_sentences spočte počet vět v proměnné. Dělá to tak, že zjistí počet teček, které mají před sebou nějaké slovo, ale ne za sebou. Podle modifikátoru count_sentences je tedy řetězec example.com is great! example.net v pořádku, je to jedna věta. Tečky v názvech hostitelů se ignorují, protože za nimi okamžitě následuje slovo. Vykřičník se ignoruje, protože nekončí tečkou. {$dobrozdani count_sentences} Výstup ukázky: 2 count_paragraphs Modifikátor count_paragraphs spočte počet odstavců v proměnné. Sečte počet znaků pro nový řádek a pro konec řádku. {$dobrozdani count_paragraphs} Výstup ukázky: 2

Ostatní modifikátory PHP 5 moduly, rozšíření a akcelerátory 121 Zbývající dva modifikátory také poskytují užitečné schopnosti: jsou to default a date_format. default Modifikátor default dodá hodnotu, když nebyla definována proměnná, za kterou se má dosadit hodnota. Ukázky použití: {* Do $exotic_flavor nebyla přiřazena žádná hodnota*} {* Do $flavor byla přiřazena hodnota "Chocolate" *} {$exotic_flavor default:"vanilla"} {$flavor default:"green Tea"} Výstup ukázek: Vanilla Chocolate date_format Modifikátor date_format poskytuje pomocí funkce strftime() PHP naformátované řetězce obsahující datum a čas. date_format můžete využít v součinnosti se speciální proměnnou $smarty.now, která obsahuje aktuální čas jako časovou známku epochy. Výchozí formátovací řetězec pro date_format je %b %e, %Y. Potřebujete-li jiný formát, specifikujte ho jako první parametr date_format. Kromě toho můžete specifikovat jako druhý parametr výchozí čas. To se hodí, je-li proměnná, kterou date_format modifikuje, prázdná. Druhý parametr se předává interně do strtotime(), takže můžete předávat relativní časy, jako jsou yesterday (včera) nebo last Thursday (poslední čtvrtek). Ukázky použití: {$smarty.now date_format} //Dnes je středa, 12. ledna 2005 {$smarty.now date_format:"%c"} {$missing_date date_format:"%c":"next Tuesday"} // Příští úterý bude 25. ledna Výstup ukázek: Jan 12, 2005 01/12/05 19:32:13 01/25/05 00:00:00 Komentáře Šablony Smarty mohou obsahovat komentáře. Na vygenerovaných stránkách nejsou komentáře vidět. Komentář dáte do šablony tak, že jeho text obklopíte oddělovači {* a *}: