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).
Smarty software | |
---|---|
Genere | Motore di template (non in lista) |
Sviluppatore | Monte Ohrt, Messju Mohr |
Data prima versione | 2001 e 2002 |
Ultima versione | 5.4.2 (21 novembre 2024) |
Sistema operativo | Multipiattaforma |
Linguaggio | PHP |
Licenza | LGPL (licenza libera) |
Sito web | www.smarty.net/ |
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
modificaLa 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
modificaSmarty 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
modificaPoiché 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
modificaLa 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-Escape {} 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:
{* 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
modificaAltri progetti
modificaCollegamenti esterni
modifica- (EN) Sito ufficiale, su smarty.net.
- Repository sorgenti di Smarty, su github.com.
- Template Engine: separare programmazione e design, su php.html.it. URL consultato il 26 febbraio 2007 (archiviato dall'url originale il 24 febbraio 2007).
- (EN) Uso di template PHP con Smarty di Cezar Floroiu - Tutorial di Smarty