Apprendre à utiliser Smarty : le moteur et compilateur de template PHP
...
Smarty est un moteur de template pour PHP. Plus précisément, il facilite la séparation entre la logique applicative et la présentation. Celà s'explique plus facilement dans une situation où le programmeur et le designer de templates jouent des rôles différents, ou, comme la plupart du temps, sont deux personnes distinctes.
Supposons par exemple que vous concevez une page Web qui affiche un article de newsletter. Le titre, le sous-titre, l'auteur et le corps sont des éléments de contenu, ils ne contiennent aucune information concernant la présentation. Ils sont transmis à Smarty par l'application, puis le designer de templates éditent les templates et utilisent une combinaison de balises HTML et de balises de templates pour formater la présentation de ces éléments (tableaux HTML, couleurs d'arrière-plan, tailles des polices, feuilles de styles, etc.). Un beau jour le programmeur a besoin de changer la façon dont le contenu de l'article est récupéré (un changement dans la logique applicative). Ce changement n'affecte pas le designer de templates, le contenu arrivera toujours au template de la même façon. De même, si le le designer de templates veut changer complétement l'apparence du template, aucun changement dans la logique de l'application n'est nécessaire. Ainsi le programmeur peut changer la logique de l'application sans restructurer les templates, et le designer de templates peut changer les templates sans briser la logique applicative.
Un des objectifs de Smarty est la séparation de la logique métier de la logique de présentation. Celà signifie que les templates peuvent contenir des traitements, du moment qu'il soit relatif à de la présentation. Inclure d'autres templates, alterner les couleurs des lignes d'un tableau, mettre du texte en majuscule, parcourir un tableau de données pour l'afficher, etc. sont toutes des actions relatives à du traitement de présentation. Celà ne signifie pas que Smarty requiert une telle séparation de votre part. Smarty ne sais pas quoi est quoi, c'est donc à vous de placer la logique de présentation dans vos templates. Ainsi, si vous ne désirez pas disposer de logique métier dans vos templates, placez tous vos contenus dans des variables au format texte uniquement.
L'un des aspects unique de Smarty est la compilation des templates. Celà signifie que Smarty lit les templates et crée des scripts PHP à partir de ces derniers. Une fois créés, ils sont exécutés. Il n'y a donc pas d'analyse coûteuse de template à chaque requête, et les templates peuvent bénéficier des solutions de cache PHP comme Zend Accelerator () ou PHP Accelerator.
Quelques caractéristiques de Smarty :
Qu'est-ce que Smarty ?
Installation
Ce dont vous avez besoin
Smarty nécessite un serveur Web utilisant PHP 4.0.6 ou supérieur.
Installation de base
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
/internals/*.php (tous)
/plugins/*.php (tous doivent être sûr, peut-être votre site n'a besoin seulement qu
Smarty utilise une [] PHP appelée SMARTY_DIR qui représente le chemin complet de la bibliothèque Smarty. En fait, si votre application trouve le fichier , vous n'aurez pas besoin de définir la variable SMARTY_DIR, Smarty s'en chargera pour vous. En revanche, si 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 :
Essayez de lancer le script ci-dessus. Si vous obtenez une erreur indiquant que le fichier n'est pas trouvé, tentez l'une des actions suivantes :
Example 2.3. Définition manuelle de la constante SMARTY_DIR
Example 2.4. Définir le chemin absolu au fichier de la bibliothèque
Example 2.5. Ajout du dossier contenant la bibliothèque à l'include_path de PHP
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 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
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 '' et le placer dans un sous-répertoire appelé
/livredor/.
Technical Note
Il est pratique de configurer le serveur Web de sorte que soit identifié comme fichier par défaut de ce répertoire. Aicnsi, si l'on tape , le script soit exécuté sans que ne soit spécifié dans l'URL. Avec Apache, vous pouvez régler cela en ajoutant à la ligne où se trouve DirectoryIndex (séparez chaque entrée par un espace) dans le .
...
Note
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 que Smarty va charger. Il va se trouver dans le dossier $template_dir.
Example 2.8. Notre
{* Smarty *} Bonjour, {$name}, Bienvenue dans Smarty !
Note technique
{* 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 . Nous allons créer une instance de Smarty, assigner une valeur à une variable de template et afficher le résultat avec .
Example 2.9. Édition de
Note techique
Dans notre exemple, nous avons configuré les chemins absolus pour chacun des répertoires
Smarty. Si 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 avec navigateur Web. Vous devriez voir "Bonjour, Ned, Bienvenue dans Smarty !".
Vous venez de terminer l'installation de base de Smarty !
Configuration avancée
Ceci est la suite de l'installation de base, veuillez lire cette dernière avant de poursuivre.
Une manière un peu plus commode de configurer Smarty est de faire votre propre classe fille et de l'initialiser selon votre environnement. De la sorte, nous n'aurons plus besoin de configurer à chaques fois les chemins de notre environnement. Créons un nouveau répertoire /php/includes/livredor/ et un nouveau fichier appelé . Dans notre exemple d'environnement, /php/includes est notre include_path PHP. Assurez-vous de faire la même chose ou alors d'utiliser des chemins absolus.
Example 2.10. Édition de
Modifions maintenant le fichier pour qu'il utilise
Example 2.11. Édition de
Vous savez maintenant qu'il est facile de créer une instance de Smarty, correctement configurée, en utilisant Smarty_livredor() qui initialise automatiquement tout ce qu'il faut pour votre application.