Smarty: separiamo la presentazione dal contenuto

Uno dei peggiori difetti di PHP (se non il peggiore) è senz’altro la mancanza di separazione del codice PHP da quello HTML, quindi da presentazione e contenuti. Le soluzioni sono varie e una è offerta da Smarty, una libreria rilasciata sotto licenza LGPL (libera, gratuita e modificabile, quindi).
Smarty occupa davvero poco spazio (meno di 1MB), non richiede installazioni difficoltose ed è davvero facile da usare.
Si crea semplicemente un file di template con l’aspetto grafico del sito, che poi è un semplice file HTML, in cui inseriamo alcune direttive che consentono di creare delle variabili a cui il valore sarà assegnato di volta in volta quando caricheremo la pagina. Detto così sembra difficile, ma vediamo un esempio.

Dopo aver scaricato la libreria, scompattiamo la cartella libs nella directory principale del sito, chiamiamola magari “Smarty-NUMEROVERSIONE”, nel mio caso “Smarty-3.0.7”. A questo punto creiamo un primo file ‘template.tpl‘ e mettiamolo in una cartella apposita, per esempio ‘/template’. Questo file conterrà il seguente codice:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<html>
  <head>
   <title>{$tag_title}</title>
   <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
  </head>
 
  <body>
    <h1>{$titolo}</h1>
    <p>{$testo}</p>
        {* Commento NON visibile nel sorgente HTML *}
        <!-- Commento visibile nel sorgente HTML -->   
        <ol>
          {foreach from=$lista_spesa item=curr_id}
            <li> {$curr_id}<br>
          {/foreach}
        </ol>
  </body>
</html>

Ora creiamo il file col codice PHP nella directory principale. Chiamiamolo per esempio “index.php“. Il codice è il seguente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
  define('SMARTY_DIR', 'Smarty-3.0.7/' );
  require_once(SMARTY_DIR . 'Smarty.class.php');
 
  $smarty = new Smarty();
  $smarty->template_dir = './templates/';
  $smarty->compile_dir = './templates/compile/';
  $smarty->cache_dir = './templates/cache/';
  $smarty->caching = false;
 
  $smarty->assign('tag_title', 'Titolo della pagina');
  $smarty->assign('titolo', 'Esempio di uso di Smarty');
  $smarty->assign('testo', 'Lista della spesa:');
 
  $lista_spesa = Array('Pane', 'Uova', 'Marmellata', 'Caffè');
  $smarty->assign('lista_spesa', $lista_spesa);
 
  $smarty->display('template.tpl');
?>

L’output sarà questo:

Immagine

Come possiamo vedere, nel file HTML abbiamo creato delle variabili a cui diamo il valore nel codice PHP. Lo stesso termplate può quindi essere usato in tutte le nostre pagine.
Smarty inoltre ha molte funzioni, come il costrutto IF, le iterazioni (di cui vediamo un assaggio nell’esempio, per la creazione della lista) e le inclusioni di altri file. Se quindi abbiamo, per esempio, un header da includere in più pagine, possiamo creare un altro file di template e includerlo negli altri, in modo da evitare ripetizioni di codice.
Smarty è anche programmabile. Attraverso alcune variabili possiamo cambiarne alcuni comportamenti. Nell’esempio potete vedere che ho disattivato la cache, ma ci sono altre cose, possiamo anche cambiare il modo con cui specifichiamo le variabili: se nella pagina usiamo per altri motivi la sintassi {$NOME_VARIABILE}, possiamo impostare altri tipi di costrutto.

Quali sono i vantaggi? Beh, chi programma lo sa, ripetere il codice è sempre una pessima idea e mischiare due aspetti diversi di un programma, quali la presentazione e i contenuti, l’interfaccia e l’implementazione, lo è ancora di più. Se per esempio due squadre di uno stesso progetto si occupano una del design del sito e una di scrivere il codice, una volta definito come deve apparire e comportarsi il sito, possono lavorare in “compartimenti stagni”, l’una in modo indipendente dall’altro, possono fare la manutenzione e far evolvere il proprio lavoro, sempre senza sapere nulla l’una del codice dell’altra e quindi anche senza rischiare di fare danni su porzioni di codice che non conoscono!
Vi consiglio di provarlo, io l’ho conosciuto oggi e ci ho messo due minuti netti a preparare l’esempio in questo post.

Risorse su WEB:
Sito ufficiale: http://www.smarty.net
Manuale ufficiale, anche in italiano: http://www.smarty.net/documentation
Un tutorial in inglese: http://www.phpeveryday.com/articles/Sma … -P849.html

Questo articolo è stato pubblicato in PHP da Alex . Aggiungi il permalink ai segnalibri.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *