Home > PHP > Moteur de template : Smarty

Moteur de template : Smarty

Smarty est un moteur de template. Basiquement, l’utilité d’un moteur de templates est de séparer le code métier de l’affichage que génèrera votre application web. Smarty se présente sous la forme d’une classe qui gère un langage de balises permettant d’afficher dynamiquement du code. Ces templates sont compilés et mis en cache (les versions compilées étant en php, elles profitent d’éventuels accélérateurs comme APC). Le moteur de template Smarty est si riche de fonctionnalités que je lui consacrerai une série d’articles. Pour commencer, nous verrons l’utilisation basique de Smarty, l’utilisation du tag {literal} ainsi que la gestion des dates.

Principe de fonctionnement

Admettons que sur votre nouveau site social-2.0-multimedia (etc), vous avez une fiche utilisateur. Chaque fiche comportera, peu ou prou, les mêmes informations, notamment le login de l’utilisateur. Voici comment procéder. Créez d’abord un fichier user.tpl (Note sur les fichiers .tpl : l’extension est libre, mais l’usage du .tpl est une convention; la plupart des IDE possédent des plug-ins pour permettre l’analyse et la coloration syntaxique de ce language de balises. Pour les puristes -je ne parle pas pour moi-, on peut justifier l’emploi du “tpl” au lieu d’un “html” plus classique par le fait que les templates contiendront certes du HTML, mais aussi des instructions destinées au moteur de template… mais bref!) . Ce fichier contiendra :

  1. Login : <strong>{$login}</strong>

Le fichier php qui l’utilisera contiendra, lui :

  1. $smarty = new Smarty();
  2. $smarty->assign(‘login’,$user_login);
  3. $smarty->display(‘user.tpl’);

On instancie un objet de la classe Smarty (ligne 1) on déclare une variable de template appelée ‘login’ qui contiendra la valeur de la variable php $user_login (ligne 2). On demande ensuite à Smarty d’ “exécuter” et d’afficher le fichier user.tpl (ligne 3).
Vous l’aurez compris, le login de l’utilisateur apparaîtra en lieu et place du {$login} dans le fichier template. Les {} indiquent à Smarty que ce code doit être exécuté, et non directement reproduit en sortie (ce qui est le cas du HTML). Ces signes encadreront toutes les balises Smarty. Vous remarquerez que la variable se déclare en php sans le signe $, mais qu’il faut utiliser celui-ci lorsqu’on veut accéder à la valeur de la variable dans le fichier de template.

Gestion des tableaux sous Smarty

Si, en PHP, on assigne une tableau à une variable Smarty, on peut y accéder grâce au point, avec la syntaxe $tableau.index.

Fonctions prédéfinies

(lien vers la doc officielle)

Le tag {literal}

S’il vous arrive de devoir utiliser des accolades {} dans le code–source de votre template (par exemple pour y intégrer des fonctions JavaScript), il faut les entourer du tag Smarty {literal}{/literal}, afin d’indiquer au moteur de template de ne pas parser le contenu, ce qui provoquerait une erreur.

Gestion des dates avec Smarty

Smarty gère l’affichage des dates très efficacement grâce à un modificateur de variable (un filtre) nommé date_format. La syntaxe de date_format sous Smarty est la suivante :

  1. Date : {$date_user|date_format:"%A %d %B %Y à %Hh%M"}

Qui affiche :

  1. Date : Sunday 15 February 2009 à 13h59

Pour passer la date que Smarty va afficher en français, il suffit d’utiliser setlocale() en php, comme ceci:

  1. setlocale(LC_ALL, ‘fr_FR’)

(n’hésitez pas à me dire si vous voulez un post plus complet sur l’installation – au moins sous Debian – et l’utilisation des locales en php). La date affichée devient alors :

  1. Date : Dimanche 15 février 2009 à 13h59

Voici les options que vous pouvez passer à la fonction date_format de smarty :

  • %a – Abréviation du jour de la semaine, selon les paramètres locaux.
  • %A – Nom du jour de la semaine, selon les paramètres locaux.
  • %b – Abréviation du nom du jour, selon les paramètres locaux.
  • %B – Nom complet du mois, selon les paramètres locaux.%c – Préférences d’affichage selon les paramètres locaux.
  • %C – Siècle, (L’année divisée par 100 et tronquée comme un entier, de 00 à 99)
  • %d – Jour du mois, en tant que nombre décimal (de 01 à 31)
  • %D – même chose que %m/%d/%y
  • %e – Jour du mois en tant que nombre décimal. Un chiffre unique est précédé par un espace (de 1 à 31)
  • %g – Position de la semaine dans le siècle [00,99]
  • %G – Position de la semaine, incluant le siècle [0000,9999]
  • %h – identique à %b
  • %H – L’heure en tant que décimale, en utilisant une horloge sur 24 (de 00 à 23)
  • %I – L’heure en tant que décimale en utilisant une horloge sur 12 (de 01 to 12)
  • %j – jour de l’année (de 001 à 366)
  • %k – Heure (horloge sur 24). Les numéros à un chiffre sont précédés d’un espace. (de 0 à 23)
  • %l – Heure (horloge sur 12). Les numéros à un chiffre sont précédés d’un espace. (de 1 à 12)
  • %m – Mois en tant que nombre décimal (de 01 à 12)
  • %M – Minute en tant que nombre décimal
  • %n – Retour chariot (nouvelle ligne).
  • %p – soit am soit pm selon l’heure donnée, ou alors leurs correspondances locales.
  • %r – heure en notation a.m. et p.m.
  • %R – Heure au format 24 heures
  • %S – Secondes en tant que nombre décimal.
  • %t – Caractère tabulation.
  • %T – Heure courante, équivalent à %H:%M:%S
  • %u – Jour de la semaine en tant que nombre décimal [1,7], ou 1 représente le lundi.
  • %U – Le numéro de la semaine en nombre décimal, utilisant le premier dimanche en tant que premier jour de la première semaine.
  • %V – Le numéro de la semaine de l’année courante selon la norme ISO 8601:1988, de 01 à 53, ou la semaine 1 est la première semaine qui dispose au minimum de 4 jours dans l’année courante et ou Lundi est le premier jour de cette semaine.
  • %w – Jour de la semaine en tant que nombre décimal, dimanche étant 0
  • %W – Le numéro de la semaine de l’année courante en tant que nombre décimal, ou Lundi est le premier jour de la première semaine.
  • %x – Représentation préférée de la date selon les paramètres locaux.
  • %X – Représentation préférée de l’heure selon les paramètres locaux, sans la date.
  • %y – L’année en tant que nombre décimal, sans le siècle. (de 00 à 99)
  • %Y – L’année en tant que nombre décimal, avec le siècle.
  • %Z – Zone horraire, nom ou abréviation
  • %% – Un caractère litéral `%’

Lectures intéressantes sur Smarty:

Pour aider à la rédaction de ma série d’articles, n’hésitez pas à laisser un commentaire sur un sujet que vous voudriez voir abordé, ou à me signaler des docs intéressantes sur Smarty, je me ferais un plaisir de les rajouter dans les lectures intéressantes :)

Ce post vous a été utile ? Re-Twittez le ! ReTwittez ce post

PHP , , , , ,

  1. F.
    | #1

    Quid des nouvelles version de Smarty ? Smarty fonctionne sur PHP5 mais écrit en PHP4. A quand une nouvelle version utilisant toute la puissance de PHP5 ?

  2. | #2

    Faut bien lire les news du site smarty 3 arrive à grand pas avec une API PHP5.
    On peu déjà testé la version alpha qui franchement tourne très bien et le système de mise en cache est une vrai merveille.

  3. Nicolas
    | #3

    Bonjour, pourquoi utiliser SMARTY plutôt que XSL(T) ?

  4. | #4

    @Nicolas
    Smarty est un moteur de template vraiment pratique et à la porté des designer qui ne pratique pas de programmation de haut niveau.
    Smarty est relativement facile à appréhender dans ses grandes ligne.
    Je travail avec beaucoup d’agence de design et ils sont ravi d’utiliser smarty par facilité sans devoir trifouiller mon code.
    Voila pourquoi ;-)

  5. | #5

    J’ai eu l’occasion de me servir de smarty avec Prestashop et c’est vraiment un bon moteur de template ! Grâce aux boucles et conditions notamment.

  1. No trackbacks yet.