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:
Copiez les fichiers bibliothèques de Smarty du sous-dossier
/libs/
de la distribution à un emplacement
accessible à PHP. Ce sont des fichiers PHP que vous NE DEVEZ PAS
modifier. Ils sont partagés par toutes les applications et ne seront
mis à jour que lorsque vous installerez une nouvelle version de
Smarty.
Example 2.1. fichiers nécessaires de la bibliothèque SMARTY
Smarty.class.php Smarty_Compiler.class.php Config_File.class.php debug.tpl /internals/*.php (tous) /plugins/*.php (tous doivent être sûr, peut-être votre site n'a besoin seulement que d'un sous-ensemble)
Smarty utilise une constante PHP appelée SMARTY_DIR
qui
représente le chemin complet de la bibliothèque Smarty.
En fait, si votre application trouve le fichier
Smarty.class.php
, vous n'aurez pas
besoin de définir la variable
SMARTY_DIR
,
Smarty s'en chargera pour vous.
En revanche, si Smarty.class.php
n'est pas dans votre répertoire d'inclusion ou que vous ne
donnez pas un chemin absolu à votre application, vous
devez définir SMARTY_DIR
explicitement.
SMARTY_DIR
doit avoir être terminé par un slash.
Example 2.2. Créer une instance de Smarty
Voici comment créer une instance de Smarty dans vos scripts PHP :
<?php // Note : Smarty a un 'S' majuscule require_once('Smarty.class.php'); $smarty = new Smarty(); ?>
Essayez de lancer le script ci-dessus. Si vous obtenez une erreur indiquant
que le fichier Smarty.class.php
n'est pas trouvé,
tentez l'une des actions suivantes :
Example 2.3. Définition manuelle de la constante SMARTY_DIR
<?php // Style *nix (notez le 'S' majuscule) define('SMARTY_DIR', '/usr/local/lib/php/Smarty-v.e.r/libs/'); // Style Windows define('SMARTY_DIR', 'c:/webroot/libs/Smarty-v.e.r/libs/'); require_once(SMARTY_DIR . 'Smarty.class.php'); $smarty = new Smarty(); ?>
Example 2.4. Définir le chemin absolu au fichier de la bibliothèque
<?php // Style *nix (notez le 'S' majuscule) require_once('/usr/local/lib/php/Smarty-v.e.r/libs/Smarty.class.php'); // Style Windows require_once('c:/webroot/libs/Smarty-v.e.r/libs/Smarty.class.php'); $smarty = new Smarty(); ?>
Example 2.5. Ajout du dossier contenant la bibliothèque à l'include_path de PHP
<?php // Editez votre fichier php.ini, ajoutez le dossier contenant la // bibliothèque Smarty à l'include_path et redémarrez le serveur web. // Puis, ce qui suit devrait fonctionner : require_once('Smarty.class.php'); $smarty = new Smarty(); ?>
Maintenant que les fichiers de la librairie sont en place, il est temps de définir les répertoires de Smarty, pour votre application.
Smarty a besoin de quatre répertoires qui sont, par défaut,
'templates/'
,
'templates_c/'
,
'configs/'
et
'cache/'
.
Chacun d'entre eux peut être défini
via les attributs
$template_dir
,
$compile_dir
,
$config_dir
et
$cache_dir
respectivement. Il est vivement
conseillé que vous régliez ces répertoires séparément pour chaque
application qui utilise Smarty.
Assurez-vous de bien connaître chemin de la racine
de votre arborescence Web. Dans notre exemple, la racine
est /web/www.example.com/docs/
. Seul Smarty
accède aux répertoires en question, et jamais le serveur Web.
Pour des raisons de sécurité, il est donc conseillé de
sortir ces répertoires dans un répertoire
en dehors de l'arborescence
Web.
Dans notre exemple d'installation, nous allons régler l'environnement
de Smarty pour une application de livre d'or. Nous avons ici choisi
une application principalement pour mettre en évidence une
convention de nommage des répertoires. Vous pouvez utiliser le même
environnement pour n'importe quelle autre application, il suffit de
remplacer “livredor” avec le nom de votre application.
Nous allons mettre nos répertoires Smarty dans
/web/www.example.com/smarty/livredor/
.
Vous allez avoir besoin d'au moins un fichier à la racine de
l'arborescence Web,
il s'agit du script auquel l'internaute a accès. Nous allons l'appeler
'index.php' et le placer dans un sous-répertoire
appelé /livredor/
.
Il est pratique de configurer le serveur Web de
sorte que index.php
soit identifié comme fichier
par défaut de ce répertoire. Aicnsi, si l'on tape
http://www.example.com/livredor/
, le script
index.php
soit exécuté sans que
index.php
ne soit spécifié dans l'URL. Avec
Apache, vous pouvez régler cela en ajoutant index.php
à la ligne où se trouve DirectoryIndex
(séparez chaque entrée
par un espace) dans le httpd.conf
.
DirectoryIndex index.htm index.html index.cgi index.php
Jetons un coup d'oeil à la structure de fichier obtenue :
Example 2.6. Structure de fichiers
/usr/local/lib/php/Smarty-v.e.r/libs/Smarty.class.php /usr/local/lib/php/Smarty-v.e.r/libs/Smarty_Compiler.class.php /usr/local/lib/php/Smarty-v.e.r/libs/Config_File.class.php /usr/local/lib/php/Smarty-v.e.r/libs/debug.tpl /usr/local/lib/php/Smarty-v.e.r/libs/internals/*.php /usr/local/lib/php/Smarty-v.e.r/libs/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 a besoin d'accéder en écriture
aux répertoires
$compile_dir
et
$cache_dir
,
assurez-vous donc que le serveur Web dispose de ces droits d'accès.
Il s'agit généralement de l'utilisateur "nobody" et du group
"nobody". Pour les utilisateurs de OS X, l'utilisateur par défaut
est "web" et le group "web". Si vous utilisez Apache, vous pouvez
parcourir le fichier httpd.conf
(en général dans
"/usr/local/apache/conf/") pour déterminer quel est l'utilisateur
et le groupe auquel il appartient.
Example 2.7. régler les permissions d'accès
chown nobody:nobody /web/www.example.com/smarty/livredor/templates_c/ chmod 770 /web/www.example.com/smarty/livredor/templates_c/ chown nobody:nobody /web/www.example.com/smarty/livredor/cache/ chmod 770 /web/www.example.com/smarty/livredor/cache/
La commande chmod 770 est relativement bien sécurisée, elle donne à l'utilisateur "nobody" et au groupe "nobody" les accès en lecture/écriture aux répertoires. Si vous voulez donner le droit d'accès en lecture à tout le monde (principalement pour pouvoir accéder vous-même à ces fichiers), vous pouvez lui préférer chmod 775.
Nous devons créer le fichier index.tpl
que Smarty va charger.
Il va se trouver dans le dossier
$template_dir
.
Example 2.8. Notre /web/www.example.com/smarty/templates/index.tpl
{* Smarty *} Bonjour, {$name}, Bienvenue dans Smarty !
{* Smarty *}
est un
commentaire
de template. Il n'est pas obligatoire mais il est bon de commencer tous vos templates
avec ce commentaire. Celà rend le fichier facilement
reconnaissable en plus de son extension. Les éditeurs
de texte peuvent par exemple reconnaître le fichier et
adapter la coloration syntaxique.
Maintenant passons à l'édition du fichier index.php
. Nous allons
créer une instance de Smarty,
assigner
une valeur à une variable de template et
afficher le résultat avec index.tpl
.
Example 2.9. Édition de /web/www.example.com/docs/livredor/index.php
<?php // charge la bibliothèque Smarty require_once(SMARTY_DIR . 'Smarty.class.php'); $smarty = new Smarty(); $smarty->template_dir = '/web/www.example.com/smarty/livredor/templates/'; $smarty->compile_dir = '/web/www.example.com/smarty/livredor/templates_c/'; $smarty->config_dir = '/web/www.example.com/smarty/livredor/configs/'; $smarty->cache_dir = '/web/www.example.com/smarty/livredor/cache/'; $smarty->assign('name','Ned'); $smarty->display('index.tpl'); ?>
Dans notre exemple, nous avons configuré les chemins absolus
pour chacun des répertoires Smarty. Si
/web/www.example.com/smarty/livredor/
est dans votre include_path PHP alors ces réglages ne sont pas nécessaires.
Quoi qu'il en soit, il est plus efficace et (par expérience)
moins générateur d'erreurs de les définir avec des chemins
absolus. Celà nous garantit que Smarty récupèrera les bons fichiers.
Et maintenant appelez le fichier index.php
avec navigateur
Web. Vous devriez voir "Bonjour, Ned, Bienvenue dans Smarty !".
Vous venez de terminer l'installation de base de Smarty !