Smarty, un template engine per PHP – parte 2
Nello scorso articolo abbiamo fatto una piccola introduzione a Smarty, un template engine estremamente potente e flessibile. Continuiamo quindi il discorso in questa puntata, presentando alcuni casi d’uso utilizzabili nelle applicazioni di tutti i giorni.
Gli esempi che vedremo si basano sull’installazione che abbiamo fatto nel primo articolo, potete quindi riprendere in mano gli stessi file e modificarli, oppure copiarli in una nuova directory e continuare da lì.
Pro e contro
I vantaggi derivanti dall’uso di un template engine come Smarty non sono immediatamente visibili; a dire il vero sono in molti a obiettare che PHP stesso è un template engine, e noi non possiamo che… dargli ragione! Ci sono però alcuni scenari per cui un sistema dedicato come Smarty è preferibile:
- non è possibile inserire codice PHP nei template, ciò si traduce principalmente in due benefici:
- sicurezza: impedisce di eseguire codice malevolo inserito (anche inconsapevolmente) da chi ha realizzato i template;
- qualità: permette di separare nettamente la logica di business da quella di presentazione, migliorando la modularità e riusabilità dell’applicazione.
- la sua sintassi e il suo funzionamento sono pensati dall’inizio per il rendering di testi: pagine html principalmente, ma anche email, file PDF o CSV, e molto altro. Tutto ciò si traduce in una maggior produttività;
- la sintassi è molto simile ad un linguaggio di markup (ovvero dotato di tag): questa caratteristica lo può rendere meno indigesto ai non-programmatori, che non rischiano di combinare troppi guai con la rigida sintassi di un linguaggio di programmazione.
Gli svantaggi sono altrettanto evidenti:
- necessità di installare e configurare una libreria;
- inevitabile curva di apprendimento iniziale, per poter diventare produttivi;
- bisogna rinunciare a certi trucchetti ottenibili solamente includendo PHP direttamente nelle pagine.
Dobbiamo ammettere che l’ultima osservazione non è del tutto vera perché in realtà è possibile aggiungere funzionalità personalizzate a Smarty; tuttavia è un argomento molto avanzato, che non vedremo in questa puntata.
Sintassi
La sintassi di Smarty è piuttosto semplice, ed è basata su tag delimitati dalle parentesi graffe { e }; tutto ciò che è all’esterno delle graffe viene copiato così com’è.
Uno degli elementi di base è costituito dalle variabili, che abbiamo già incontrato nell’articolo precedente.
<?php define('SMARTY_DIR', '[DIRECTORY DI INSTALLAZIONE DI SMARTY]/libs/'); require_once(SMARTY_DIR . 'Smarty.class.php'); $smarty = new Smarty(); $smarty->assign('name', 'Pinco Pallino'); $smarty->display('default.tpl'); ?>
Come potete notare, il metodo assign() memorizza una variabile name con valore “Pinco Pallino” all’interno del template engine; successivamente, durante l’esecuzione del template, potremmo riferirci ad essa con una notazione molto simile a quella PHP:
<html> <head> <title>Hello World</title> </head> <body> Ciao {$name}! </body> </html>
Ovviamente è possibile assegnare ogni tipo di variabile: stringhe, numeri, array associativi, date, e così via. Ecco un esempio di codice PHP (abbiamo omesso codice di “contorno”):
<?php $user = array( 'id' => 42, 'username' => 'pincopallo', 'firstName' => 'Pinco', 'lastName' => 'Pallino', 'birthDate' => new DateTime('1978-06-20') ); $smarty->assign('user', $user);
e relativo template:
<table border="1"> <tr> <th>id</th> <td>{$user.id}</td> </tr> <tr> <th>username</th> <td>{$user.username}</td> </tr> <tr> <th>firstName</th> <td>{$user.firstName}</td> </tr> <tr> <th>lastName</th> <td>{$user.lastName}</td> </tr> <tr> <th>birthDate</th> <td>{$user.birthDate->format('d/m/Y')}</td> </tr> </table>
La forma {$user.username} permette di accedere agli elementi dell’array. Da notare anche come sia stato possibile invocare il metodo DateTime.format() senza problemi.