Introducere în Cadrul Templating Smarty

Smarty este un motor / cadru templating bazat pe PHP. Acesta vă permite să vă separați în continuare logica de afaceri de vizualizare, eliminând cât mai mult cod PHP posibil de la opiniile dvs. Unii dezvoltatori și cadre preferă să nu folosească un motor templating, alții nu le preferă să folosească PHP simplu în opiniile dvs. Ambele puncte de vedere pot fi argumentate, iar în cele din urmă, este mai mult o chestiune de gust. Oricum, nu este niciodată o idee proastă să o încerci înainte de a decide să nu o folosești, și asta este despre acest tutorial: încercarea Smarty Templating Framework.


Pasul 0: Ce să așteptați

La sfârșitul acestui tutorial, veți avea o idee de bază despre cum funcționează Smarty. Veți putea încărca fișiere șablon, să le transmiteți variabile, să utilizați un "layout" în care sunt inserate celelalte vizualizări ale dvs. și să scrieți propriile modificatoare. Toate acestea vor fi realizate folosind o clasă suplimentară de împachetare, pe care o puteți integra cu ușurință în proiectele dvs. existente.


Pasul 1: Configurarea proiectului

Proiectul pentru acest tutorial va avea o configurație foarte ușoară, deoarece nu dezvoltăm o aplicație reală. Doar creați un dosar de proiect (numele meu este "smarty_example") cu un fișier index.php în el și un director numit "lib" în interiorul acestuia. De asemenea, creați un fișier numit smtemplate.php în dosarul "lib". Apoi, creați un dosar "vizionări" din "smarty_example". Acest dosar va conține fișierele șablonului inteligent.

Înainte de a putea utiliza ceva, trebuie să o instalați. Din fericire, instalarea Smarty este extrem de ușoară și nu necesită aproape nicio configurare. Mai întâi, descărcați Smarty și extrageți arhiva. Puteți verifica totul în interiorul arhivei, dar vom avea nevoie doar de dosarul "libs" pentru aplicația noastră. Redenumiți-l la "smarty" și lipiți-l în dosarul "lib" din aplicația noastră. Smarty folosește câteva foldere suplimentare, așa că creați folderele "templates_c", "cache" și "configs" din dosarul "lib / smarty". Dacă nu utilizați Windows, va trebui să oferiți 775 de permisiuni pe aceste foldere pe serverul dvs. Web. Arborele de directoare ar trebui să arate astfel:


Pasul 2: Crearea clasei SMTemplate

Fiecare programator are propria idee despre API-ul ideal. Pentru a ajusta ușor API-ul Smarty și ne permite să adăugăm câteva funcționalități suplimentare, vom crea o clasă de învelitoare numită SMTemplate, care va avea grijă de detaliile inteligente pentru noi. Această abordare are un alt avantaj: dacă, la un moment dat, ar trebui să alegeți să utilizați un alt motor de șablon, puteți crea un pachet pentru acel motor, păstrând în același timp interfața SMTemplate și astfel fără a sparge codul care utilizează clasa SMTemplate.

Stocarea configurației

Înainte de a codifica funcționalitatea clasei SMTemplate, vom avea nevoie de un loc pentru a stoca câteva detalii de configurare. Puteți face acest lucru în mai multe moduri, adică definind opțiuni de configurare ca fiind constante de clasă, definindu-le ca constante în fișierul smtemplate.php sau menținându-le într-un fișier de configurare separat. Prefer ultima opțiune, așa că voi crea un fișier smtemplate_config.php. Smarty are nevoie de configurare pentru șablon, șablon compilat, cache și directoare config. Mai târziu, am putea adăuga, de asemenea, opțiuni specifice SMTemplate în fișierul nostru de configurare, dar pentru moment, acest lucru se va face:

 / ** * @file * Fișier de configurare pentru clasa SMTemplate * / $ smtemplate_config = array ('template_dir' => 'views /', 'compile_dir' => 'lib / smarty / templates_c /', 'cache_dir' lib / smarty / cache / ',' configs_dir '=>' lib / smarty / configs / ';);

Construirea clasei SMTemplate

Clasa SMTemplate va încărca acest fișier de configurare și va trece opțiunile la Smarty. Înainte de a putea trece opțiunile, vom avea nevoie de un obiect de clasă Smarty. Clasa noastră SMTemplate ar putea extinde clasa Smarty, dar prefer să folosesc o variabilă de instanță privată pentru a conține obiectul Smarty. Până acum, avem următoarele pentru clasa SMTemplate:

 / ** * @file * Wrapper pentru modelul Smarty Engine * / require_once ('smarty / Smarty.class.php'); require_once ( 'smtemplate_config.php'); clasa SMTemplate private $ _smarty; funcția __construct () $ this -> _ smarty = nou Smarty (); global $ smtemplate_config; $ acest -> _ smarty-> template_dir = $ smtemplate_config ['template_dir']; $ this -> _ smarty-> compile_dir = $ smtemplate_config ['compile_dir']; $ this -> _ smarty-> cache_dir = $ smtemplate_config ['cache_dir']; $ this -> _ smarty-> configs_dir = $ smtemplate_config ['configs_dir']; 

Modele de redare

După cum puteți vedea, clasa noastră este încă destul de patetică, deoarece nu poate face nimic. Vom rezolva această problemă adăugând o funcție de redare, care încarcă un șablon și îl afișează.

 funcția rendere ($ template) $ this -> _ smarty-> afișare ($ template. '.tpl'); 

Pentru a face ceva, va trebui să creați un fișier șablon și apoi să apelați funcția de redare din fișierul index.php. Fișierul șablon va fi destul de simplu, conținând o pagină HTML html. Denumiți-l "home.tpl" și plasați-l în directorul "vizualizări".

    Acasă    

Salut Lume!

Acum, tot ce rămâne este de a crea un obiect SMTemplate și de a face "acasă". Deschideți index.php, adăugați următoarele linii de cod și navigați acolo în browser.

 require_once ( 'lib / smtemplate.php'); $ tpl = noul SMTemplate (); $ Tpl-> render ( 'acasă');

Pasul 3: Atribuirea și formatarea variabilelor

Dacă nu am putea face nimic dinamic, Smarty ar fi destul de inutil. Din fericire, putem atribui variabile clasei inteligente și afișăm cele din șablonul nostru. Putem folosi, de asemenea, unele funcții Smarty (bine, modificatori de fapt) pentru a le formata corect.

Trecerea unui șir de variabile

Deși Smarty acceptă alocarea de variabile, SMTemplate nu (încă). Vom furniza stilul de atribuire CodeIgniter, unde treceți o matrice la funcția de redare. Puteți adapta SMTemplate pentru a sprijini și alte metode; de exemplu, atribuirea lor obiectului și apoi utilizarea __set pentru a le stoca într-o matrice este, de asemenea, un mod curat. Totuși, pentru acest tutorial, trecerea unei matrice va face. Înainte de a atribui variabilele, vom edita șablonul pentru ceva ceva mai dinamic. Salutând lumea este obișnuită pentru programatori, dar nu foarte utilă, deci hai să folosim o variabilă pentru a determina cine suntem salutari. În al doilea rând, vom adăuga data de astăzi la mesaj. Variabilele pot fi afișate prin împachetarea acestora în paranteze curbate.

  

Bună ziua, $ receiver! E astăzi $ date!

Dacă actualizați pagina, veți vedea că variabilele nu au fost completate, deoarece nu le-am setat. Setarea variabilelor se poate face folosind smarty-> assign, deci hai să le atribuim. Funcția de redare va avea acum o matrice opțională de date ca un al doilea argument.

 ($ template, $ data = array ()) foreach ($ date ca $ cheie => valoare $) $ this -> _ smarty-> aloca (cheie $, valoare $);  $ this -> _ smarty-> afișare (șablon $. '.tpl'); 

Încă nu va funcționa, pentru că nu transmitem o matrice când sunăm funcția noastră de redare. Putem face acest lucru cu ușurință, modificând câteva linii în fișierul index.php.

 $ data = array ('receptor' => 'JR', 'date' => time (),); $ tpl = noul SMTemplate (); $ tpl-> render ('home', $ date);

Dacă actualizați acum, pagina va spune ceva de genul "Bună ziua, JR! Este 1282810169 astăzi!". Desigur, această dată nu este exact ceea ce am avut în minte. Trebuie să fie formatat, ceea ce ne aduce la următoarea secțiune.

Folosirea Modificatorilor pentru Formatarea Variabilelor

Smarty nu este doar un motor de șablon care caută și înlocuiește variabilele. Este, de asemenea, un cadru puternic, care vă permite să economisiți timp folosind lucruri cum ar fi modificatori, funcții și blocuri. Dacă dorim să formăm data noastră, de exemplu, putem folosi modificatorul date_format. Pentru a aplica un modificator unei variabile, pur și simplu puneți un caracter de țeavă și numele modificatorului în spatele lui, urmat de argumentele opționale care sunt separate de colonii. Modificatorul date_format are un argument șir, care reprezintă formatul pe care va lua data data și o dată implicită opțională, pe care nu o vom avea nevoie. Următorul cod va afișa data ca "zi (în zecimale) Luna".

  

Bună ziua, $ receiver! Este $ date | date_format: "% d% B" astăzi!

Acest lucru ar trebui să dea acum ceva de forma "Bună ziua, JR! Este 26 august astăzi!" Acum, poate că vrem să ne asigurăm că receptorul nostru este superior. Putem obține acest lucru prin utilizarea modificatorului superior.

  

Bună ziua, $ receiver | superior! Este $ date | date_format: "% d% B" astăzi!

Acum, dacă voi modifica index.php pentru a trece "jr" în loc de "JR", șablonul va afișa încă "JR". Ușor, nu-i așa? Apoi, vom include șabloanele noastre într-un "layout".


Pasul 4: Lucrul cu un aspect

Înainte de a modifica clasa SMTemplate pentru a activa layout-urile, vom crea mai întâi un aspect. Creați un nou director numit "layouts" în directorul "smarty_example" și mutați home.tpl acolo. Redenumiți-l la 'page.tpl'. Vom elimina conținutul nostru "hello world" anterioare și vom pune două linii orizontale. Conținutul nostru va fi plasat între aceste linii.

    Acasă    

Bineînțeles, acest lucru nu o va reduce, deoarece Smarty nu va ști unde să introducă conținutul nostru. Există mai multe modalități de a obține conținut din alt șablon din aspectul nostru și voi folosi funcția de preluare a Smarty. Această funcție returnează șablonul nostru ca text, în loc să îl afișeze. Aceasta înseamnă că putem scoate șablonul și apoi îl putem atribui unei variabile pentru a fi utilizate în șablonul nostru! Numele acestei variabile este aleasă de dumneavoastră. Îmi prefixez variabilele speciale cu __, pentru a le distinge de celelalte variabile pe care le folosesc. O voi numi "conținut", deoarece atribuim conținutul paginii noastre.

  
$ Conținut __

Acest lucru încheie aspectul nostru, așadar să creăm câteva șabloane de utilizat ca conținut. Voi crea un șablon "hello", care va conține o linie standard "hello world" și un șablon "lipsum", care conține un text Lorem Ipsum. Nu uitați să dați aceste șabloane o extensie .tpl.

 

Salut Lume!

 

Lorem ipsum dolor stați amet, consectetur adipiscing elit. Aiean aliquet dignissim diam la vulputat. Aenean nec le ligula ac dolor fringilla pharetra. Cras în august ac tellus dictum pellentesque. Întreg elementul temei lectus, non rutrum sem viverra a. În cazul în care aveți o problemă, vă rugăm să ne contactați. Maecenas sed nibh felis. Donec dictum porta ante la faucibus. Morbi massa tellus, pulvinar id porta id, imperdiet vel nibh. Donec lectus nulla, portitor id id, cursus vitae leo. Nulla e nunc eu lorem pozitionare hendrerit ut ac urna. Aenean sodales lobortis egestas. Împreună cu faucibus hendrerit temporal.

Adaptarea clasei SMTemplate pentru a utiliza un aspect este, de asemenea, extrem de ușoară. Mai întâi vom configura o opțiune de configurare pentru directorul de layouts, așa cum am făcut pentru vizionările noastre.

 / ** * @file * Fișier de configurare pentru clasa SMTemplate * / $ smtemplate_config = array ('layouts_dir' => 'layouts /', 'template_dir' templates_c / ',' cache_dir '=>' lib / smarty / cache / ';' configs_dir '=>' lib / smarty / configs / ';);

Apoi, vom schimba funcția noastră de redare. Vom furniza aspectul ca un al treilea parametru opțional și îl vom lăsa implicit la pagina. Apoi, vom prelua șablonul solicitat, îl vom atribui variabilei de conținut $ __ și vom afișa aspectul nostru.

 ($ temp =, $ data = array (), $ layout = 'page') foreach ($ date ca $ cheie => valoare $) $ this -> _ smarty-> assign (cheie $, valoare $);  $ content = $ this -> _ smarty-> preluare ($ template. '.tpl'); $ this -> _ smarty-> aloca ('__ content', $ content); $ this -> _ smarty-> afișare ($ layout. '.tpl'); 

Există câteva lucruri de luat în considerare, referitoare la acest cod. În primul rând, nu i-am spus lui Smarty unde să găsească încă machetele noastre. Putem face acest lucru prin adăugarea unui șablon dir, dar această abordare înseamnă că nu putem da aspectul nostru același nume ca șabloanele noastre - Smarty nu ar ști pe care să alegeți. Am putea rezolva acest lucru oferindu-le o extensie diferită, sau prin setarea și resetarea directorului șablon în interiorul funcției noastre de redare sau prin utilizarea mai multor funcții Smarty. Deocamdată, vom rezolva cu constrângere că aspectul și vizionările nu pot avea același nume. Putem adăuga directorul de layouts folosind funcția addTemplateDir ().

 funcția __construct () $ this -> _ smarty = nou Smarty (); global $ smtemplate_config; $ acest -> _ smarty-> template_dir = $ smtemplate_config ['template_dir']; $ This -> _ smarty-> addTemplateDir ($ smtemplate_config [ 'layouts_dir']); // <- new line $this->_smarty-> compile_dir = $ smtemplate_config ['compile_dir']; $ this -> _ smarty-> cache_dir = $ smtemplate_config ['cache_dir']; $ this -> _ smarty-> configs_dir = $ smtemplate_config ['configs_dir']; 

Să o verificăm prin schimbarea din nou a fișierului index.php.

 require_once ( 'lib / smtemplate.php'); $ tpl = noul SMTemplate (); $ Tpl-> render ( 'Hello');

Functioneaza!

Și dacă îl schimbăm pentru a face "lipsum", funcționează și ea:


Pasul 5: Crearea modificatorilor proprii

Ca parte finală a acestui tutorial, voi introduce una dintre cele mai avansate caracteristici ale lui Smarty, care o fac mai mult decât un simplu motor templating. Smarty conține o serie de funcții standard și modificatori, dar este, de asemenea, extrem de ușor să creați propriile dvs. funcții. Să aruncăm o privire la modificatorul pe care l-am format pentru a ne forma data:

 $ date | date_format: "% d% B"

Dacă doriți un modificator personalizat, tot ce trebuie să faceți este să scrieți o funcție PHP.

Aceasta va duce, de fapt, la un apel la funcția smarty_modifier_date_format (), cu $ date și șirul de format ca argumente. Această funcție va returna un șir, iar acest șir va fi afișat. Deci, dacă doriți un modificator personalizat, tot ce trebuie să faceți este să scrieți o funcție PHP. De exemplu, vom scrie un modifier numit "weirdcase", care va majora toate consoanele și minuscule toate vocalele, adică "Lorem Ipsum" devine "LoReM IPSuM". Pentru a face acest lucru, creați un fișier numit "modifier.weirdcase.php" în folderul "lib / smarty / plugins". Modificatorul nostru va avea un singur argument, șirul care trebuie modificat.

 / ** * Modul de modificări ciudate * * Tip: modificator * Nume: weirdcase * Scop: transformarea consonanțelor în majuscule și vocale în litere mici *

Putem obține rezultatul nostru prin definirea unei vocale "matrice", transformând șirul într-o matrice și apoi traversând-o și verificând dacă fiecare caracter este în matricea noastră de vocale. Dacă este, noi o facem cu litere mici, în caz contrar, noi o avem cu majusculă. Caracterele modificate sunt apoi atașate la o variabilă de rezultat.

 funcția smarty_modifier_weirdcase ($ string) $ str_array = str_split ($ string); ($ str_array ca $ char) if (in_array ($ vowels, $ char) $ $ = ) $ result. = strtolower ($ char); alt $ $ rezultat. = strtoupper ($ char); return $ result;

Ar trebui să facă acest truc, așa că haideți să verificăm. Editați șablonul "lipsum.tpl" și adăugați-l la acesta cu un h1 care conține "Lorem Ipsum".

 

'Lorem Ipsum' | ciudă

Lorem ipsum dolor stați amet, consectetur adipiscing elit. Aiean aliquet dignissim diam la vulputat. Aenean nec le ligula ac dolor fringilla pharetra. Cras în august ac tellus dictum pellentesque. Întreg elementul temei lectus, non rutrum sem viverra a. În cazul în care aveți o problemă, vă rugăm să ne contactați. Maecenas sed nibh felis. Donec dictum porta ante la faucibus. Morbi massa tellus, pulvinar id porta id, imperdiet vel nibh. Donec lectus nulla, portitor id id, cursus vitae leo. Nulla e nunc eu lorem pozitionare hendrerit ut ac urna. Aenean sodales lobortis egestas. Împreună cu faucibus hendrerit temporal.


Pasul 6: Concluzie

Deși există mult mai mult pentru Smarty decât am putut să mă încadrez în acest tutorial, sperăm că acest lucru vă va oferi o cunoaștere de bază despre cum să lucrați cu el. În esență, deja cunoașteți tot ceea ce voi nevoie să știi. De asemenea, ar trebui să puteți determina dacă vă place ideea de a folosi acest cadru templating sau nu până acum. Subiectele mai avansate, cum ar fi filtrele și blocurile, sunt utile, cu toate acestea, veți face bine fără ele. Puteți găsi documentația privind funcțiile mai avansate de pe site-ul Smarty. Vă mulțumim pentru lectură!

Cod