Initiation aux templates en PHP avec Smarty


prcdentsommairesuivant

I. Introduction

I-A. Remerciements

Tout d'abord merci Yogui, responsable de la partie PHP chez DEVELOPPEZ.COM, qui a tout de suite rpondu prsent quand je l'ai contact pour la rdaction de cet article et qui a largement contribu l'amlioration du document d'origine.

Merci galement GrandFather et titoumimi pour leurs contributions.

Merci mes collgues: Sylvain JAMES, Jean-Luc MICHEL et Jean PEYROUX qui m'ont support dans la rdaction de cet article.

I-B. Prsentation

Smarty est un systme (ou moteur) de templates (entendez par template modle ou patron) utilisable avec PHP 4 ou PHP 5.

Vous trouverez le site officiel ici

Dans cet article les exemples sont prsents en PHP5

I-C. Avantages et inconvnients

L'intrt principal de Smarty rside dans la sparation du contenu et de la forme.

Le concept d'un systme de template en gnral et de Smarty en particulier est de rserver les tches de production des donnes PHP et de mettre le code de prsentation (HTML en l'occurence) dans des 'templates' ou modles, un fichier qu l'on suffixera dans nos exemples par '.TPL'

L'analyse des avantages et inconvnients de Smarty que je fais ci-aprs est le fruit des quelques expriences que j'ai eu avec ce moteur de templates. Je sais que tout le monde ne sera pas forcment d'accord avec les arguments avancs. Je vous encourage donc mettre Smarty en oeuvre et vous faire vous-mme une opinion... l'important est d'essayer pour se faire une ide.

I-C-1. Inconvnients

L'utilisation du systme de template Smarty n'est pas la porte de tous, souvent le dveloppeur non chevronn sera rebut par son utilisation. Par exemple, il est frquent de ne pas trouver immdiatement la faon d'accder sa variable dans le template (mme avec un peu d'exprience d'ailleur)... ce qui peut tre un peu irritant.

Mme avec une certaine exprience en PHP "traditionnel" (production et prsentation PHP mlangs), l'utilisation de Smarty n'est pas vidente, elle remet en cause nombre de choses dans la manire de dvelopper.

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 connatre les variables (et les innombrables faon d'y accder), 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 apparat comme une vidence.

Le second avantage est la plus grande facilit de travailler plusieurs. Prenez une quipe de dveloppement avec des niveaux disparates (c'est le cas o je travaille). Ce dcouplage mtier / prsentation permet potentiellement tout le monde de participer au dveloppement bien plus facilement que dans un dveloppement PHP plus traditionnel.

Un autre avantage qui m'est particulirement cher (demandez donc mes collgues !!!) est qu'avec Smarty au final le code produit est plus "propre" et "comprhensible" .. au final mieux organis en particulier dans les gros projets. Bien sur il est possible de coder comme un cochon quand mme !!!

Enfin, un systme de cache permet d'acclrer considrablement la vitesse des traitements (la page n'est pas systmatiquement recalcule). La dcision d'utiliser la gestion de cache est la charge du dveloppeur.

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 ncessite peu de pr-requis:

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

Je vous encourage galement tlcharger (ou consulter) la documentation de Smarty qui est trs complte.

L'tape suivante est de tlcharger les sources de SmartyTlcharger 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, tlchargeable sur ce site, est au format .tar.gz, procurez vous de quoi dcompresser ce type d'archive (par exemle 7zip).

Une fois l'archive de Smarty rcupre, vous constaterez la prsence de plusieurs fichiers et rpertoires:

Liste de fichiers de l'archive Smarty

En fait pour dmarrer c'est simplement le rpertoire '/libs' qui nous intresse. Il contient les fichiers suivants:

Liste de fichiers ncessaires

Un conseil: placez les sources de Smarty dans un rpertoire en ayant l'esprit que vous pourrez utiliser ce systme de templates dans plusieurs projets, la racine de votre serveur web par exemple.

I-E. Tester

En premier lieu vous devez crer le fichier PHP qui aura pour objet de "piloter" Smarty (Inclusion de la librairie et instanciation de l'objet Smarty et affichage du template aprs 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 aprs compilation
 
$oSmarty->display('test.tpl'); 

L'tape suivante est de crer deux rpertoires (dans les exemples, ces deux rpertoires sont placs la racine du rpertoire contenant le fichier PHP):

  • templates/
  • templates_c/

Ces deux rpertoires contiendront respectivement les fichiers templates (.TPL) et les fichiers compils.

La prsence de ces deux rpertoires est obligatoire pour l'utilisation de Smarty.

Vous avez le choix pour l'emplacement des rpertoires:

  • L'emplacement explicite: Dans ce cas vous spcifiez vous-mme l'emplacement de ces deux rpertoires avec les deux proprits de l'objet Smarty: "template_dir" et "compile_dir"
  • L'emplacement implicite: il s'agit simplement de crer ces deux rpertoires dans le rpertoire du script PHP qui s'occupe des manipulations Smarty (c'est la mthode que nous retiendrons pour les exemples)

Pour terminer notre premier test, nous allons crer un fichier "test.tpl" dans le rpertoire "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 tche d'afficher les donnes 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 prvisualisation, lancez votre page "test.php". Vous devriez obtenir le rsultat 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 chane de caractres dans notre page HTML. Avant de nous lancer dans l'criture du code sachez qu'il est ncessaire de respecter deux tapes:

  1. Ct PHP: utilisation de la mthode assign() de l'objet Smarty pour affecter la variable Smarty la valeur de la variable PHP
  2. Ct 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 donne qui vient de mon script PHP "{$hello_world}" -->
		<h2 color="red">{$hello_world}</h2>
	</body>
</html>

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

  1. Le nom de la variable "cible" que l'on utilisera dans le fichier template (c'est une chane de caractres)
  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 mtas-structures PHP (tabelaux, objets, fichiers xml -avec simpleXML-) que nous utiliserons par la suite.


prcdentsommairesuivant

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 ni 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.