title: Smarty
text: # Smarty
  
  Smarty è un motore di web template scritto in PHP. Smarty consente di separare il codice PHP, la business logic (la programmazione del software), dal codice HTML, il presentation logic (l'aspetto grafico di un sito web), e di generare contenuti web mediante il rimpiazzo di speciali Smarty tag all'interno del documento (sostituzione di variabili e molto altro).
  
  Un tag (marcatore) è una direttiva, racchiusa da speciali caratteri (tipicamente parentesi graffe), interpretata dal motore di Smarty. Queste direttive possono essere delle variabili, denotate dal simbolo del dollaro ($), funzioni, o anche istruzioni di controllo del flusso. Smarty permette ai programmatori PHP di definire delle funzioni da includere nei tag stessi di Smarty.
  
  ## Model-View-Controller
  
  La raffinata astrazione creata da Smarty consente di separare drasticamente l'interfaccia grafica di una pagina web (la presentazione) dal back-end in PHP, favorendo lo sviluppo di applicazioni di gran lunga più organizzate ed eleganti. L'uso di Smarty facilita agli sviluppatori PHP l'implementazione del modello di sviluppo Model-View-Controller (MVC), che presenta degli indubbi vantaggi: è infatti possibile "nascondere" ai webdesigner la logica di programmazione di un sito, mentre i programmatori lavoreranno senza curarsi dell'interfaccia grafica del sito.
  
  ## Caratteristiche
  
  Smarty consente la programmazione di template (modelli) attraverso una serie di caratteristiche built-in, tra cui:
  
  * espressioni regolari
  * foreach, while
  * if, elseif, else
  * modificatori di variabile - per esempio {$variabile|nl2br}
  * funzioni create dall'utente
  * calcolo matematico all'interno del template
  
  oltre a molte altre. Ci sono comunque altri motori di template che supportano queste caratteristiche.
  
  ## Codice di esempio
  
  Poiché Smarty separa il codice PHP dall'HTML, avremo due file. Il primo è index.tpl:
  
  Nel codice del business logic (es. index.php) è possibile interfacciarsi a Smarty per usare il template qui sopra:
  
  ## Versione 3.0
  
  La versione 3.0 di Smarty è stata riscritta per PHP 5 utilizzando le funzionalità offerte da questa versione e che non erano presenti in PHP 4. Quindi Smarty 3 non funziona con le versioni precedenti di PHP. Le funzionalità principali introdotte sono:
  
  * Eridaterietà dei template;
  * Auto-Escapement per JavaScript o per qualunque file interpretato da smarty (CSS, JS, etc);
  * Definizione di funzioni nei template.
  
  Come esempio di questa ultima funzionalità vediamo questo snippet di codice:
  
  L'output risultante è il seguente:
  
  