Initiation aux templates en PHP avec Smarty


précédentsommairesuivant

I. Introduction

I-A. Remerciements

Tout d'abord merci à Yogui, responsable de la partie PHP chez DEVELOPPEZ.COM, qui a tout de suite répondu présent quand je l'ai contacté pour la rédaction de cet article et qui a largement contribué à l'amélioration du document d'origine.

Merci également à GrandFather et titoumimi pour leurs contributions.

Merci à mes collègues: Sylvain JAMES, Jean-Luc MICHEL et Jean PEYROUX qui m'ont supporté dans la rédaction de cet article.

I-B. Présentation

Smarty est un système (ou moteur) de templates (entendez par template modèle ou patron) utilisable avec PHP 4 ou PHP 5.

Vous trouverez le site officiel ici

Dans cet article les exemples sont présentés en PHP5

I-C. Avantages et inconvénients

L'intérêt principal de Smarty réside dans la séparation du contenu et de la forme.

Le concept d'un système de template en général et de Smarty en particulier est de réserver les tâches de production des données à PHP et de mettre le code de présentation (HTML en l'occurence) dans des 'templates' ou modèles, un fichier qu l'on suffixera dans nos exemples par '.TPL'

L'analyse des avantages et inconvénients de Smarty que je fais ci-après est le fruit des quelques expériences que j'ai eu avec ce moteur de templates. Je sais que tout le monde ne sera pas forcément d'accord avec les arguments avancés. Je vous encourage donc à mettre Smarty en oeuvre et vous faire vous-même une opinion... l'important est d'essayer pour se faire une idée.

I-C-1. Inconvénients

L'utilisation du système de template Smarty n'est pas à la portée de tous, souvent le développeur non chevronné sera rebuté par son utilisation. Par exemple, il est fréquent de ne pas trouver immédiatement la façon d'accéder à sa variable dans le template (même avec un peu d'expérience d'ailleur)... ce qui peut être un peu irritant.

Même avec une certaine expérience en PHP "traditionnel" (production et présentation PHP mélangés), l'utilisation de Smarty n'est pas évidente, elle remet en cause nombre de choses dans la manière de développer.

L'apprentissage du langage de templates (ce que l'on retrouvera dans nos fichiers .TPL) est indispensable. Cela pourra aussi en refroidir plus d'un. Ainsi il faudra connaître les variables (et les innombrables façon d'y accéder), les fonctions, le debogage. C'est ce que je me propose de vous expliquer.

I-C-2. Avantages

Le premier avantage que je vois à l'utilisation de Smarty est le gain de temps à moyen/long terme. Si sa mise en place peut prendre un peu plus de temps, plus on avance dans un projet et plus Smarty apparaît comme une évidence.

Le second avantage est la plus grande facilité de travailler à plusieurs. Prenez une équipe de développement avec des niveaux disparates (c'est le cas où je travaille). Ce découplage métier / présentation permet potentiellement à tout le monde de participer au développement bien plus facilement que dans un développement PHP plus traditionnel.

Un autre avantage qui m'est particulièrement cher (demandez donc à mes collègues !!!) est qu'avec Smarty au final le code produit est plus "propre" et "compréhensible" .. au final mieux organisé en particulier dans les gros projets. Bien sur il est possible de coder comme un cochon quand même !!!

Enfin, un système de cache permet d'accélérer considérablement la vitesse des traitements (la page n'est pas systématiquement recalculée). La décision d'utiliser la gestion de cache est à la charge du développeur.

Vous l'aurez compris, en ce qui me concerne, je suis convaincu que Smarty est un outil de PRODUCTIVITE.

I-D. Installer

L'installation de Smarty nécessite peu de pré-requis:

  • Un serveur web supportant PHP (apache ou IIS par exemple)
  • Php version 4.0.6 ou version sipérieure

Je vous encourage également à télécharger (ou consulter) la documentation de Smarty qui est très complète.

L'étape suivante est de télécharger les sources de SmartyTélécharger Smarty et de les installer sur votre serveur (dans les exemples j'utilise le package WAMPSite de WAMP). Attention l'archive contenant les sources de Smarty, téléchargeable sur ce site, est au format .tar.gz, procurez vous de quoi décompresser ce type d'archive (par exemle 7zip).

Une fois l'archive de Smarty récupérée, vous constaterez la présence de plusieurs fichiers et répertoires:

Liste de fichiers de l'archive Smarty

En fait pour démarrer c'est simplement le répertoire '/libs' qui nous intéresse. Il contient les fichiers suivants:

Liste de fichiers nécessaires

Un conseil: placez les sources de Smarty dans un répertoire en ayant à l'esprit que vous pourrez utiliser ce système de templates dans plusieurs projets, à la racine de votre serveur web par exemple.

I-E. Tester

En premier lieu vous devez créer le fichier PHP qui aura pour objet de "piloter" Smarty (Inclusion de la librairie et instanciation de l'objet Smarty et affichage du template après compilation).

test.php
Sélectionnez
// Inclusion de la librairie
require_once('../Smarty/Smarty.class.php'); 
// Instanciation d'un l'objet Smarty
 
$oSmarty = new Smarty();
// Affichage du template après compilation
 
$oSmarty->display('test.tpl'); 

L'étape suivante est de créer deux répertoires (dans les exemples, ces deux répertoires sont placés à la racine du répertoire contenant le fichier PHP):

  • templates/
  • templates_c/

Ces deux répertoires contiendront respectivement les fichiers templates (.TPL) et les fichiers compilés.

La présence de ces deux répertoires est obligatoire pour l'utilisation de Smarty.

Vous avez le choix pour l'emplacement des répertoires:

  • L'emplacement explicite: Dans ce cas vous spécifiez vous-même l'emplacement de ces deux répertoires avec les deux propriétés de l'objet Smarty: "template_dir" et "compile_dir"
  • L'emplacement implicite: il s'agit simplement de créer ces deux répertoires dans le répertoire du script PHP qui s'occupe des manipulations Smarty (c'est la méthode que nous retiendrons pour les exemples)

Pour terminer notre premier test, nous allons créer un fichier "test.tpl" dans le répertoire "templates/". C'est dans ce fichier que l'on retrouvera tout ce qui concerne l'affichage de notre page, à savoir le HTML (éventuellement JAVASCRIPT et STYLE) et les instructions propres à Smarty qui auront pour tâche d'afficher les données produites dans le fichier PHP. En voici le contenu:

test.tpl
Sélectionnez
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
	<head>
		<title>Test smarty</title>
	</head>
	<body>
		<h1>Test smarty</h1>
	</body>
</html>

Pour la prévisualisation, lancez votre page "test.php". Vous devriez obtenir le résultat suivant:

Page de test
Page de test

Nous allons ensuite tester le passage d'une variable (produite dans le fichier PHP) au template Smarty, dans le but d'afficher une chaîne de caractères dans notre page HTML. Avant de nous lancer dans l'écriture du code sachez qu'il est nécessaire de respecter deux étapes:

  1. Côté PHP: utilisation de la méthode assign() de l'objet Smarty pour affecter à la variable Smarty la valeur de la variable PHP
  2. Côté TEMPLATE: Afficher la variable Smarty
test.php
Sélectionnez

<?php
	// Inclure la librairie smarty
	require_once('../smarty/Smarty.class.php');
 
	// Instancier notre objet smarty
	$oSmarty = new Smarty();
 
	// Affecter la valeur "Bonjour le monde" à la varaible SMARTY 'hello_world'
	$oSmarty->assign('hello_world', 'Bonjour le monde');
 
	// Provoque le rendu du template
	$oSmarty->display('test.tpl');
?>
test.tpl
Sélectionnez
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd"><html>
	<head>
	<title>Test smarty</title>
	</head>
	<body>
		<h1>Test smarty</h1>
		<!-- ici j'injecte la donnée qui vient de mon script PHP "{$hello_world}" -->
		<h2 color="red">{$hello_world}</h2>
	</body>
</html>

Revenons en à l'utilisation de la méthode assign() dans le fichier PHP.
Cette méthode prend deux arguments:

  1. Le nom de la variable "cible" que l'on utilisera dans le fichier template (c'est une chaîne de caractères)
  2. La variable ou la valeur PHP que l'on souhaite associer au premier argument(variable ou valeur)
Test simple avec une variable

Voià pour nos tests.
Maintenant nous allons faire un bref retour sur les métas-structures PHP (tabelaux, objets, fichiers xml -avec simpleXML-) que nous utiliserons par la suite.


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2008 Eric POMMEREAU. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.