Smarty in pratica è diviso in 2 cartelle di files. La prima è il “core” (cuore) dell’applicazione che ci genera il template e l’altra cartella contiene tutte le funzioni secondarie che possiamo integrare o modificare a nostro piacimento. Questo è un grande punto di forza di questo sistema di templating, infatti possiamo aggiungere quante funzioni o se vogliamo chiamarli plugins che vogliamo.
Ora vedremo come fare a richiamare una funzione.
Supponiamo di voler stampare un’immagine sul nostro template. L’unica cosa che andremo a scrivere sul nostro codice php:
<?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 fà 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 sinistroe destro che per comodità di sviluppo in fase di progettazione con dreamweaver lo imposto come apertura tag php $t->left_delimiter = "<?"; $t->right_delimiter = "?>"; //assegno l'immagine che mi interessa $T_VARS['image']="prova.jpg"; //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 . ?>
e lato template avremo :
<?html_image file=$T.image?>
In questo modo diciamo al “core” di smarty di andare a pescare il plugin html_image. Il plugin non è altro che una funzione chiamata con questa sintassi :
function smarty_function_html_image($params, &$smarty)
ed il file che la contiene deve avere la sintassi : function.html_image.php
Il che significa che noi possiamo creare quanti plugins vogliamo rispettando la sintassi del nome della funzione e del nome del file che contiene la funzione. Per esempio se dovessimo cambiare il plugin che genera il codice di inserimento dell’immagine possiamo creare un nuovo plugin richiamabile dal template tramite la parola chiave html_image_pers.
Chiameremo dunque il file function.html_image_pers.php e all’interno creeremo una funzione chiamata smarty_function_html_image_pers($params, &$smarty). I parametri passati alla funzione sono obbligatori in quanto il parametro $params passa alla funzione sotto forma di array tutti i parametri impostati sul template (come fossero parametri di un tag html) e il parametro &$smarty passa la referenza dell’istanza di smarty.
A questo punto con i valori dei parametri richiesti ed impostati lato template possiamo generare tramite questa funzione l’output che vogliamo sul nostro template. Infatti Smarty andrà semplicemente a sostituire il valore tornato da questa funzione al posto del tag immesso sull’html del template.





