Smarty är en kompileringsmallmotor för PHP , ett av verktygen som låter dig separera applikationslogik och data från presentation i andan av Model-view-controller-konceptet .
Smarty-mallspråket utökar HTML med smarty-taggar som är inbäddade i dokumentet. Dessa taggar kan vara PHP-variabler (möjligen med modifierare, t.ex. {$variable|nl2br} ), funktioner eller grundläggande strukturerade programmeringskonstruktioner som {if …} … {else} … {/if} .
Ett av syftena med Smarty är att separera applikationslogik från presentation. Mallar kan fortfarande innehålla logik, men det måste vara datapresentationslogik . Det ska lösa problem som att koppla ihop andra mallar, växla färgning av rader i en tabell, konvertera bokstäver till versaler, cykla genom en array för att visa den, etc. Smarty-biblioteket i sig tvingar inte fram separation av applikationslogik och presentation - den korrekta disciplin med hjälp av webbmallar är upp till utvecklaren.
Smarty är det första mallbiblioteket som använder en bytecode -cachemekanism .
Smarty låter dig:
För att göra det enklare att bygga skalbara webbapplikationer har Smarty en inbyggd cachningsmekanism .
Smarty läser mallfiler och genererar PHP -kod baserat på dem. Koden skapas en gång och exekveras sedan bara, så det finns inget behov av att bearbeta en mallfil för varje begäran och varje mall kan dra full nytta av PHP -bytecode - cachetillägg som eAccelerator eller PHP Accelerator . Smarty var förmodligen det första mallbiblioteket som använde en sådan mekanism. Senare dök många analoger upp, med användning av både smarty-liknande mallsyntax (som Twig eller Quicky ), och andra tillvägagångssätt för mallsyntax.
Att kompilera mallar uppnår prestanda som är jämförbar med handskrivna PHP-mallar [40] . If/elseif/else/endif-konstruktionerna skickas till PHP-hanteraren, så syntaxen för uttrycket {if ...} kan vara så enkelt eller så komplext som önskas. Obegränsad häckning av sektioner, förhållanden etc. är möjlig.
HTML-sida med Smarty-taggar:
<!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 > {* Kommentar som inte kommer att finnas i HTML-koden *} < p > {$body_text} </ p > </ body > <!-- Kommentaren som kommer att finnas i HTML-koden --> </ html >Arbetets logik i PHP-skriptet är nedan:
define ( 'SMARTY_DIR' , 'smarty-2.6.22/' ); require_once ( SMARTY_DIR . 'Smarty.class.php' ); $smarty = new Smarty (); $smarty -> template_dir = './mallar/' ; $smarty -> compile_dir = './templates/compile/' ; $smarty -> cache_dir = './templates/cache/' ; $smarty -> caching = false ; $smarty -> error_reporting = E_ALL ; // LÄMNA E_ALL UNDER UTVECKLING $smarty -> debugging = true ; $smarty -> assign ( 'title_text' , 'TITLE: Smart exempel ...' ); $smarty -> assign ( 'body_text' , 'BODY: Detta är texten som matas ut av assign()' ); $smarty -> display ( 'index.tpl' );Smarty (och bibliotek baserade på detta tillvägagångssätt) brukar kritiseras från två håll. Förespråkare för att använda en delmängd av PHP som ett mallspråk hävdar att eftersom "det i grunden tillhandahåller ett gränssnitt till PHP med en ny syntax" och därför ger små fördelar. [41] XSLT- förespråkare tycker att Smarty lämnar för mycket utrymme för att blanda logik och presentation, vilket gör smarty-mallar mycket svårare för tredje part att redigera och återanvända . [42] .
Sedan 2008 har en efterföljare av Smarty-syntaxen funnits tillgänglig, Quicky -mallmotorn [43] , vars huvudsakliga utmärkande egenskap är ett annat tillvägagångssätt för implementering av mallanalys (som enligt författaren fungerar mycket snabbare) och en förlängning av syntaxen som redan är bekant för många: stöd för hjälpare (funktioner som deklareras direkt i mallen), närvaron av "magiska" loopkonstanter, en förenklad syntax för att tilldela variabelvärden utan att använda {math}, kompilerbara kontrollstrukturer.
En intressant utveckling av Smarty-idéer är Twig- biblioteket , som utvecklas och underhålls av Fabien Potencier, huvudutvecklaren och ideologen för Symfony [44] .
Mallhanterare som Dwoo [45] eller hanteraren inbyggd i eZ Publish / ezComponents smarty- liknande syntax
Fram till 2007 utvecklades också en "lätt" gaffel av Smarty - Template Lite [46] (i de första versionerna av Smarty Light).
2013 släpptes den första utgåvan av Fenom -mallmotorn [47] som stöder Smarty-liknande syntax. Ett utmärkande drag för mallmotorn är mallanalys, som sker utan användning av reguljära uttryck, men baseras på den inbyggda tokenizern [48] , vilket gör mallparsningen snabb och själva mallmotorn enkel.