What is Smarty?
Why use it?
Use Cases and Work Flow
Syntax Comparison
Template Inheritance
Best Practices
Crash Course
You may use the Smarty logo according to the trademark notice.
For sponsorship, advertising, news or other inquiries, contact us at:
Installate i file delle librerie di Smarty che si trovano nella directory /libs/ della distribuzione. Questi sono i file PHP che NON DOVETE modificare. Sono condivisi da tutte le applicazioni e vengono modificati solo quando passate ad una nuova versione di Smarty.
Example 2.1. File delle librerie di Smarty
Smarty.class.php Smarty_Compiler.class.php Config_File.class.php debug.tpl /internals/*.php (tutti) /plugins/*.php (tutti)
Smarty usa una costante PHP chiamata SMARTY_DIR che contiene il path di sistema
della directory delle librerie di Smarty. Fondamentalmente, se la vostra applicazione
è in grado di trovare il file Smarty.class.php
, non avete bisogno
di impostare SMARTY_DIR, in quanto Smarty la troverà da solo. Tuttavia, se
Smarty.class.php
non si trova nel vostro include_path, o se non
fornite alla vostra applicazione un percorso assoluto per questo file, allora dovete
definire manualmente SMARTY_DIR. La costante SMARTY_DIR deve
contenere uno slash (/) finale.
Ecco come creerete un'istanza di Smarty nei vostri script PHP:
Example 2.2. Creazione di un'istanza di Smarty
<?php require('Smarty.class.php'); $smarty = new Smarty; ?>
Provate a lanciare lo script qui sopra. Se ricevete un errore che dice che
il file Smarty.class.php
non si trova, dovete fare una
delle cose seguenti:
Example 2.3. Fornire un percorso assoluto al file delle librerie
<?php require('/usr/local/lib/php/Smarty/Smarty.class.php'); $smarty = new Smarty; ?>
Example 2.4. Aggiungere la directory della libreria all'include_path di PHP
<?php // Modificate il file php.ini, aggiungete la directory delle // librerie di Smarty all'include_path e riavviate il server web. // A questo punto il codice seguente dovrebbe funzionare: require('Smarty.class.php'); $smarty = new Smarty; ?>
Example 2.5. Impostare manualmente la costante SMARTY_DIR
<?php define('SMARTY_DIR', '/usr/local/lib/php/Smarty/'); require(SMARTY_DIR . 'Smarty.class.php'); $smarty = new Smarty; ?>
Ora che i file delle librerie sono al loro posto, è ora di impostare le
directory di Smarty per la vostra applicazione. Smarty necessita di quattro
directory chiamate (per default) templates
,
templates_c
, configs
e cache
.
Ciascuna di queste è definibile dalle proprietà
della classe Smarty $template_dir
,
$compile_dir
, $config_dir
, e
$cache_dir
rispettivamente. E' altamente raccomandato
impostare un insieme separato di queste directory per ogni applicazione che
userà Smarty.
Assicuratevi di conoscere il percorso della document root del vostro web
server. Nel nostro esempio, la document root è /web/www.mydomain.com/docs/
.
Le directory di Smarty vengono accedute solo dalle librerie di Smarty e mai
direttamente dal browser. Tuttavia, per evitare problemi di sicurezza, si
raccomanda di mettere queste directory al di fuori della
document root.
Per la nostra installazione di esempio, imposteremo l'ambiente di Smarty per
una applicazione di guest book. Abbiamo scelto un'applicazione al solo scopo
di avere una convenzione per il nome delle directory. Potete usare lo stesso
ambiente per qualsiasi applicazione, soltanto sostituendo "guestbook" con il
nome della vostra applicazione. Metteremo le nostre directory di Smarty sotto
/web/www.mydomain.com/smarty/guestbook/
.
Avrete bisogno di almeno un file sotto la document root, e quello sarà lo script
a cui può accedere ilbrowser. Lo chiameremo index.php
,
e lo metteremo in una sottodirectory della document root chiamata /guestbook/
.
Conviene impostare il web server in modo che "index.php" possa essere identificato come indice di default della directory, così se provate a richiedere "http://www.example.com/guestbook/", lo script index.php verrà eseguito senza "index.php" nell'URL. In Apache questo può essere impostato aggiungendo "index.php" alla fine dell'impostazione DirectoryIndex (le voci vanno separate con uno spazio l'una dall'altra).
Diamo un'occhiata alla struttura dei file fino ad ora:
Example 2.6. Esempio di struttura dei file
/usr/local/lib/php/Smarty/Smarty.class.php /usr/local/lib/php/Smarty/Smarty_Compiler.class.php /usr/local/lib/php/Smarty/Config_File.class.php /usr/local/lib/php/Smarty/debug.tpl /usr/local/lib/php/Smarty/internals/*.php /usr/local/lib/php/Smarty/plugins/*.php /web/www.example.com/smarty/guestbook/templates/ /web/www.example.com/smarty/guestbook/templates_c/ /web/www.example.com/smarty/guestbook/configs/ /web/www.example.com/smarty/guestbook/cache/ /web/www.example.com/docs/guestbook/index.php
Smarty necessita del diritto di scrittura su $compile_dir e su $cache_dir, quindi assicuratevi che l'utente del web server possa scriverci sopra. Di solito si tratta dell'utente "nobody" e gruppo "nobody". Per utenti di OS X, il default è utente "www" e gruppo "www". Se usate Apache, potete guardare nel file httpd.conf (di solito in "/usr/local/apache/conf/") per vedere quale utente e gruppo vengono usati.
Example 2.7. Impostazione dei permessi sui file
chown nobody:nobody /web/www.example.com/smarty/guestbook/templates_c/ chmod 770 /web/www.example.com/smarty/guestbook/templates_c/ chown nobody:nobody /web/www.example.com/smarty/guestbook/cache/ chmod 770 /web/www.example.com/smarty/guestbook/cache/
chmod 770 vi garantisce una notevole sicurezza, in quanto consente solo all'utente e al gruppo "nobody" l'accesso in lettura/scrittura alle directory. Se volete consentire la lettura a chiunque (soprattutto per vostra comodità, se volete guardare questi file), potete impostare invece 775.
Ora dobbiamo creare il file index.tpl che Smarty caricherà. Si troverà nella directory $template_dir.
Example 2.8. Edit di /web/www.example.com/smarty/guestbook/templates/index.tpl
{* Smarty *} Hello, {$name}!
{* Smarty *} è un commento del template. Non è obbligatorio, ma è buona pratica iniziare tutti i file di template con questo commento. Rende semplice riconoscere il file, indipendentemente dalla sua estensione. Ad esempio, un editor di testo potrebbe riconoscere il file ed attivare una particolare evidenziazione della sintassi.
Ora editiamo index.php. Creeremo un'istanza di Smarty, valorizzeremo una variabile del template e faremo il display del file index.tpl. Nel nostro ambiente di esempio, "/usr/local/lib/php/Smarty" si trova nell'include_path. Assicuratevi che sia così anche per voi, oppure usate percorsi assoluti.
Example 2.9. Edit di /web/www.example.com/docs/guestbook/index.php
<?php // caricamento delle librerie di Smarty require('Smarty.class.php'); $smarty = new Smarty; $smarty->template_dir = '/web/www.example.com/smarty/guestbook/templates/'; $smarty->compile_dir = '/web/www.example.com/smarty/guestbook/templates_c/'; $smarty->config_dir = '/web/www.example.com/smarty/guestbook/configs/'; $smarty->cache_dir = '/web/www.example.com/smarty/guestbook/cache/'; $smarty->assign('name','Ned'); $smarty->display('index.tpl'); ?>
Nell'esempio stiamo usando percorsi assoluti per tutte le directory
di Smarty. Se /web/www.example.com/smarty/guestbook/
fa
parte dell'include_path di PHP, questo non è necessario. Comunque, è più
efficiente e (per esperienza) meno soggetto ad errori usare percorsi
assoluti. Questo vi garantisce che Smarty prenda i file dalle directory
giuste.
Ora richiamate il file index.php
dal browser.
Dovreste vedere "Hello, Ned!"
Avete completato l'installazione base di Smarty!