Smarty è secondo il mio parere il miglior template engine per php. Il template engine è gratuito e lo scaricate a questo indirizzo Download Smarty Template Engine.
A questo punto siamo pronti per la prima lezione di come installare ed usare Smarty.
Una volta scaricato il file zip lo decomprimiamo e rinominiamo la cartella con un nome a piacimento ad esempio Smarty.
Apriamo la cartella e vedremo una lista di cartelle e files, per il funzionamento è necessaria solo la cartella libs.
A questo punto dovremmo tener presente che a Smarty servono 2 cartelle, una nella quale salvare i templates da noi creati ed una nella quale andare a salvare i templates compilati da Smarty stesso.
Creiamo quindi le nostre 2 cartelle (templates e templates_c) dove la seconda cartella stà per templates compilati.
Vi anticipo già che ho riscontrato un baco nella compilazione quindi se abbiamo dei templates che si riferiscono e immagini diverse a seconda di qualche parametro dinamico sarà opportuno creare una struttura di directory da riprodurre a specchio nelle 2 directory appena create.
Es. abbiamo un applicazione
<?php
//includo il file con il core dell'applicazione
require_once('Smarty/libs/Smarty.class.php');
//setto la lingua come parametro (esempio di variabile che mi fa cambiare le immagini dei templates)
if(empty($_SESSION['lang']) && empty($_GET['lang']))
if(empty($param['lang']))
$lang='ita';
else
$lang=$_GET['lang'];
else
$lang=$_SESSION['lang'];
//setto una array globale che contierrà tutte le variabili da assegnare al template, questo per praticità nel codice
$T_VARS = array();
//a questo punto non mi resta altro che inizializzare il template engine e configurarlo per le mie esigenze
//inizializzo la classe smarty
$t = new Smarty;
//setto la cartella da dove pescare i miei template
$t->template_dir = dirname(__file__).'/templates-'.$lang.'/main/';
//setto la cartella dove il template engine dovrà salvare i templates compilati
$t->compile_dir = dirname(__file__).'/templates_c/'.$lang.'/';
//setto il delimitatore sinistro che per comodità di sviluppo in fase di progettazione con dreamweaver lo imposto come apertura tag php
$t->left_delimiter = "<?";
//e il delimitatore destro
$t->right_delimiter = "?>";
//assegno l'array globale delle variabili
$t->assign('T',$T_VARS);
//visaulizzo il template (che risiederà dentro la cartella impostata con la variabile $t->template_dir)
$t->display('struttura.html');
// ora sarà visualizzato il template struttura.html con la possibilità sul template di accedere a tutti gli elementi dell'array $T_VARS ma sul template questo array si chiamerà $T in quanto ho assegnato $T_VARS al nome di variabile T .
?>
In questa piccola applicazione abbiamo potuto vedere come utilizzare questo template engine lato php.
Possiamo subito notare che è facile e sopratutto ci sono pochissime righe di codice da scrivere, cosa molto importante per separare il codice php dalla sua visualizzazione.
Notiamo il fatto che è stata introdotta anche la variabile $lang. Infatti, se noi volessimo distinguere i templates per 2 lingue come italiano ed inglese, cosa che capita molto facilmente, dovremmo necessariamente creare 2 cartelle diverse sia per i templates originali che per quelli compilati. In questo modo i templates in italiano avranno quasi sicuramente delle immagini linkate con delle scritte in italiano e punteranno alle immagini giuste e quelli in inglese saranno comunque corretti.
Ora passiamo a come far visualizzare qualunque dato che sia inserito nel nostro Array $T_VARS.
Apriamo il file di template ’struttura.html’ :
Vediamo sopra come l’istruzione Smarty inizi con <? e finisca con ?> ovvero i delimitatori che abbiamo fissato prima nel file php.
L’array in smarty è accessibile tramite il punto
Infatti all’istruzione include passiamo il parametro file con valore $T.page (pagina da includere) . Invece di includere una pagina potremmo semplicemente stampare un valore:
fare un ciclo:
<?foreach from=$T.myArray item=$foo?>
<li><?$foo.valore?></li>
<?/foreach?>
o molto altro ancora.
Più avanti vedremo come fare operazioni più complesse.
Share on Facebook