Smarty

Da Wikipedia, l'enciclopedia libera.
Smarty
Sviluppatore Monte Ohrt, Messju Mohr
Ultima versione 3.1.8 (20 febbraio 2012)
Sistema operativo Multipiattaforma
Linguaggio
Genere Motore di template (non in lista)
Licenza LGPL
(Licenza libera)
Sito web smarty.net

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[modifica | modifica sorgente]

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[modifica | modifica sorgente]

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[modifica | modifica sorgente]

Poiché Smarty separa il codice PHP dall'HTML, avremo due file. Il primo è index.tpl:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//IT" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
   <title>{$title_text}</title>
   <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
</head>
 
<body> {* Questo è un piccolo commento che NON sarà visibile nel sorgente HTML *}
 
<p>{$body_text}</p>
 
</body><!-- Questo è un piccolo commento che sarà visibile nel sorgente HTML -->
</html>

Nel codice del business logic (es. index.php) è possibile interfacciarsi a Smarty per usare il template qui sopra:

define('SMARTY_DIR', 'smarty-2.6.9/' );
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->error_reporting = E_ALL; // LASCIA E_ALL DURANTE LO SVILUPPO
 
$smarty->assign('title_text', 'TITOLO: Un semplice esempio sull\'uso di Smarty...');
$smarty->assign('body_text', 'BODY: Questo e\' il messaggio impostato con assign()');
 
$smarty->display('index.tpl');

Versione 3.0[modifica | modifica sorgente]

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 versione precedenti di PHP. Le funzionalità principali introdotte sono:

  • Eridaterietà dei template;
  • Auto-Escapement {} per Javascript o per qualunque file parsato da smarty (CSS, JS, etc);
  • Definizione di funzioni nei template.

Come esempio di questa ultima funzionalità vediamo questo snippet di codice:

{* define the function *}
{function name=menu level=0}
  <ul class="level{$level}">
  {foreach $data as $entry}
    {if is_array($entry)}
      <li>{$entry@key}</li>
      {menu data=$entry level=$level+1}
    {else}
      <li>{$entry}</li>
    {/if}
  {/foreach}
  </ul>
{/function}
 
{* create an array to demonstrate *}
{$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' =>
['item3-3-1','item3-3-2']],'item4']}
 
{* run the array through the function *}
{menu data=$menu}

L'output risultante è il seguente:

* item1
* item2
* item3
      o item3-1
      o item3-2
      o item3-3
            + item3-3-1
            + item3-3-2
* item4

Voci correlate[modifica | modifica sorgente]

Altri progetti[modifica | modifica sorgente]

Collegamenti esterni[modifica | modifica sorgente]