Smarty je kompilační šablonový engine pro PHP , jeden z nástrojů, který umožňuje oddělit aplikační logiku a data od prezentace v duchu konceptu Model-view-controller .
Jazyk šablon Smarty rozšiřuje HTML o smarty tagy , které jsou vložené do dokumentu. Těmito značkami mohou být proměnné PHP (případně s modifikátory, např. {$variable|nl2br} ), funkce nebo základní strukturované programovací konstrukty jako {if …} … {else} … {/if} .
Jedním z účelů Smarty je oddělit aplikační logiku od prezentace. Šablony mohou stále obsahovat logiku, ale musí to být logika prezentace dat . Měla by řešit problémy, jako je připojování dalších šablon, střídání vybarvování řádků v tabulce, převod písmen na velká písmena, procházení pole k jejímu zobrazení atd. Knihovna Smarty sama o sobě nevynucuje oddělení aplikační logiky a prezentace – správné disciplína pomocí webových šablon je ponechána na vývojáři.
Smarty je první knihovna šablon, která používá mechanismus ukládání do mezipaměti bajtkódu .
Smarty vám umožňuje:
Aby bylo vytváření škálovatelných webových aplikací snazší, má Smarty vestavěný mechanismus ukládání do mezipaměti .
Smarty čte soubory šablon a na jejich základě generuje PHP kód. Kód je vytvořen jednou a poté pouze spuštěn, takže není potřeba zpracovávat soubor šablony pro každý požadavek a každá šablona může plně využít rozšíření PHP bytecode caching , jako je eAccelerator nebo PHP Accelerator . Smarty byla pravděpodobně první knihovnou šablon, která používala takový mechanismus. Později se objevilo mnoho analogií využívajících syntaxi šablon podobné smarty (jako Twig nebo Quicky ) a další přístupy k syntaxi šablon.
Kompilace šablon dosahuje výkonu srovnatelného s ručně psanými PHP šablonami [40] . Konstrukty if/elseif/else/endif jsou předány obslužnému programu PHP, takže syntaxe výrazu {if ...} může být jednoduchá nebo složitá podle potřeby. Je možné neomezené vnořování sekcí, podmínek atd.
HTML stránka se Smarty tagy:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> < html > < head > < title > {$title_text} </ title > < meta http-equiv = "content-type" content = "text/html; charset=iso-8859-1" /> </ head > < body > {* Komentář, který nebude v HTML kódu *} < p > {$body_text} </ p > </ body > <!-- Komentář, který bude v kódu HTML --> </ html >Logika práce ve skriptu PHP je níže:
definovat ( 'SMARTY_DIR' , 'smarty-2.6.22/' ); require_once ( SMARTY_DIR . 'Smarty.class.php' ); $smarty = nový Smarty (); $smarty -> template_dir = './templates/' ; $smarty -> kompilovat_adresar = './templates/kompilovat/' ; $smarty -> cache_dir = './templates/cache/' ; $smarty -> caching = false ; $smarty -> error_reporting = E_ALL ; // OPUSTIT E_ALL BĚHEM VÝVOJE $smarty -> debugging = true ; $smarty -> přiřadit ( 'title_text' , 'TITLE: Smarty příklad ...' ); $smarty -> assign ( 'body_text' , 'BODY: Toto je textový výstup pomocí assign()' ); $smarty -> display ( 'index.tpl' );Smarty (a knihovny založené na tomto přístupu) jsou obvykle kritizovány ze dvou směrů. Zastánci používání podmnožiny PHP jako šablonovacího jazyka tvrdí, že protože „v podstatě poskytuje rozhraní pro PHP pomocí nové syntaxe“, a proto nabízí malou výhodu. [41] Zastánci XSLT zjišťují, že Smarty ponechává příliš mnoho prostoru pro míchání logiky a prezentace, takže je pro třetí strany mnohem obtížnější upravovat a znovu používat smarty šablony . [42] .
Od roku 2008 je k dispozici následovník syntaxe Smarty, šablonovací engine Quicky [43] , jehož hlavním rozlišovacím znakem je odlišný přístup k implementaci šablonového parsování (který podle autora funguje mnohem rychleji) a rozšíření již známé syntaxe: podpora pomocníků (funkce deklarované přímo v šabloně), přítomnost konstant „magické“ smyčky, zjednodušená syntaxe pro přiřazování hodnot proměnných bez použití {math}, kompilovatelné řídicí struktury.
Zajímavým vývojem Smarty nápadů je knihovna Twig , kterou vyvíjí a udržuje Fabien Potencier, hlavní vývojář a ideolog Symfony [44] .
Obsluha šablon, jako je Dwoo [45] nebo obslužná rutina zabudovaná do eZ Publish / ezComponents ,
Do roku 2007 byla vyvinuta i „lehká“ vidlice Smarty – Template Lite [46] (v prvních verzích Smarty Light).
V roce 2013 bylo vydáno první vydání šablonovacího enginu Fenom [47] , které podporuje syntaxi podobnou Smarty. Charakteristickým rysem enginu šablon je parsování šablon, které probíhá bez použití regulárních výrazů, ale je založeno na vestavěném tokenizeru [48] , díky kterému je parsování šablon rychlé a samotný engine šablony snadný.