Smarty este un motor de compilare de șabloane pentru PHP , unul dintre instrumentele care vă permite să separați logica aplicației și datele de prezentare în spiritul conceptului Model-view-controller .
Limbajul de șabloane Smarty extinde HTML cu etichete smarty care sunt încorporate în document. Aceste etichete pot fi variabile PHP (posibil cu modificatori, de exemplu {$variable|nl2br} ), funcții sau constructe de programare structurată de bază, cum ar fi {if …} … {else} … {/if} .
Unul dintre scopurile Smarty este de a separa logica aplicației de prezentare. Șabloanele pot conține în continuare logică, dar trebuie să fie logică de prezentare a datelor . Ar trebui să rezolve probleme precum conectarea altor șabloane, alternarea colorării rândurilor dintr-un tabel, conversia literelor în majuscule, trecerea printr-o matrice pentru a o afișa etc. Biblioteca Smarty în sine nu forțează separarea logicii aplicației și a prezentării - cea corectă disciplina folosind șabloane web este lăsată la latitudinea dezvoltatorului.
Smarty este prima bibliotecă de șabloane care utilizează un mecanism de stocare în cache a codului de octeți .
Smarty vă permite să:
Pentru a facilita construirea de aplicații web scalabile, Smarty are un mecanism de stocare în cache încorporat .
Smarty citește fișierele șablon și generează cod PHP pe baza acestora. Codul este creat o dată și apoi executat doar, astfel încât nu este nevoie să procesați un fișier șablon pentru fiecare solicitare și fiecare șablon poate profita din plin de extensiile de cache a codului de octeți PHP, cum ar fi eAccelerator sau PHP Accelerator . Smarty a fost probabil prima bibliotecă de șabloane care a folosit un astfel de mecanism. Mai târziu, au apărut mulți analogi, folosind atât sintaxa șablonului de tip smarty (cum ar fi Twig sau Quicky ), cât și alte abordări ale sintaxei șablonului.
Compilarea șabloanelor atinge performanțe comparabile cu șabloanele PHP scrise de mână [40] . Construcțiile if/elseif/else/endif sunt transmise handler-ului PHP, astfel încât sintaxa pentru expresia {if ...} poate fi atât de simplă sau complexă pe cât se dorește. Este posibilă imbricarea nelimitată a secțiunilor, condițiilor etc.
Pagina HTML cu etichete Smarty:
<!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 > {* Comentariu care nu va fi în codul HTML *} < p > {$body_text} </ p > </ body > <!-- Comentariul care va fi în codul HTML --> </ html >Logica de lucru în scriptul PHP este mai jos:
define ( 'SMARTY_DIR' , 'smarty-2.6.22/' ); require_once ( SMARTY_DIR . 'Smarty.class.php' ); $smarty = nou Smarty (); $smarty -> template_dir = './templates/' ; $smarty -> compile_dir = './templates/compile/' ; $smarty -> cache_dir = './templates/cache/' ; $smarty -> caching = false ; $smarty -> error_reporting = E_ALL ; // LĂSAȚI E_ALL ÎN TIMPUL DEZVOLTĂRII $smarty -> debugging = true ; $smarty -> assign ( 'title_text' , 'TITLE: Smarty example ...' ); $smarty -> assign ( 'body_text' , 'BODY: Acesta este textul rezultat de assign()' ); $smarty -> display ( 'index.tpl' );Smarty (și bibliotecile bazate pe această abordare) sunt de obicei criticate din două direcții. Susținătorii utilizării unui subset de PHP ca limbaj de șablon susțin că pentru că „practic oferă o interfață pentru PHP folosind o nouă sintaxă” și, prin urmare, oferă puțin avantaj. [41] Susținătorii XSLT consideră că Smarty lasă prea mult loc pentru amestecarea logicii și prezentării, ceea ce face ca șabloanele inteligente să fie mult mai dificil de editat și reutilizat de către terți . [42] .
Din 2008, a fost disponibil un adept al sintaxei Smarty, motorul de șabloane Quicky [43] , a cărui principală trăsătură distinctivă este o abordare diferită a implementării analizei șabloanelor (care, potrivit autorului, funcționează mult mai rapid) și o extensie a sintaxei deja familiară pentru mulți: suport pentru helpers (funcții declarate direct în șablon), prezența constantelor buclei „magice”, o sintaxă simplificată pentru alocarea de valori variabile fără a utiliza {math}, structuri de control compilabile.
O dezvoltare interesantă a ideilor Smarty este biblioteca Twig , care este dezvoltată și întreținută de Fabien Potencier, dezvoltatorul principal și ideologul Symfony [44] .
Managerii de șabloane, cum ar fi Dwoo [45] sau handlerul încorporat în eZ Publish / ezComponents o sintaxă asemănătoare smarty
Până în 2007, a fost dezvoltată și o furcă „ușoară” a Smarty - Template Lite [46] (în primele versiuni ale Smarty Light).
În 2013, a fost lansată prima versiune a motorului de șabloane Fenom [47] , care acceptă sintaxa de tip Smarty. O trăsătură distinctivă a motorului de șabloane este analiza șablonului, care are loc fără utilizarea expresiilor regulate, dar se bazează pe tokenizer încorporat [48] , ceea ce face ca analiza șablonului să fie rapidă și motorul de șabloane în sine ușor.