Smarty, un template engine per PHP – parte 2

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.

Link