Les templates (ou modèles) permettent de séparer le code HTML et le script PHP. Dit comme ça, le bénéfice ne vous semble pas évident par rapport à l’immersion des balises html dans le script php. Voilà pour moi les avantages des templates :
simplification des scripts php
optimisation plus simple du code html
plus de flexibilité dans le développement et modification de l’aspect
d’un site en quelques secondes
customization du site (voir les skins)
permet au webdesigner qui ne connait pas la programmation de travailler tranquillement
sur des sites dynamiques tout en conservant ses outils
réutilisation plus facile du code
Avant de commencer
Il existe actuellement de nombreuses librairies de scripts gérant les
templates. La plus connue est sûrement FastTemplate, mais elle n’est
pas la seule. Pour ma part je lui préfère l’implémentation
de la PHPLib. Je lis régulièrement des avis sur la supériorité
de l’une par rapport à l’autre, et je ne rentrerai pas dans
ces considérations. Mais pour résumer il semble que FastTemplate
soit moins rapide car ce serait une simple traduction d’une librairie
PERL et donc n’utilisant pas les meilleurs fonctions de PHP.
Pour ceux qui s’inquiètent déjà en se disant qu’il
faut installer la PHPLib, ce qui n’est pas toujours possible, ne vous
inquiétez pas. Vous n’avez besoin que d’un fichier : template.inc.
Vous pouvez jetter le reste si vous le souhaitez.
Premier exemple
Créons un fichier html (template.tpl) contenant ce simple code (attention, retapez le code, car le copier-coller risque de créer des erreurs) :
Bonjour {NOM} !C’est ce fichier qui définit l’apparence. Le nom et l’extension du fichier importent peu, c’est à vous de créer une convention qui vous indique que c’est un fichier template.
Maintenant un petit bout de script php, créons un fichier test.php :
Le code $t = new Template(”.”); crée donc un objet $t et indique le chemin pour accéder aux fichiers templates. Dans ce cas le fichier php et le template sont dans le même dossier, et on aurait aussi pû créer l’objet comme ça : $t = new Template(); .
Ensuite set_file() indique le fichier template à utiliser. Puis; on
défini le contenu de la zone {NOM} avec la fonction set_var(). La fonction
parse() traite ensuite le template mais n’affiche rien. Pour afficher
la page, on utilise la fonction p().
Sur un exemple aussi simple, l’intérêt des templates est
limité, mais il vous permet de tester quelques possibilités. Pour
modifier l’aspect de votre page, vous n’avez plus qu’à
modifier template.tpl. Vous pouvez le modifier sans rique dans un éditeur
HTML comme Dreamweaver car il ne contient aucun code php.
On complique un peu
Créons un tableau avec une liste de nom. Nous allons utiliser non pas un, mais deux templates. D’abord le tableau (tableau.tpl) :
<tr>
<td>{ID} : {NOM}</td>
</tr>Maintenant voyons le script pour afficher le tableau (test2.php):
<?
include "template.inc";
$tableau=array("tarzan","jane","cheetah");
$t = new Template("tpl/"); // création du template $t
$t->set_file(array(
"page"=>"tableau.tpl",
"ligne"=>"ligne.tpl"
)); // on définit le fichier contenant le modèle
// traitement des lignes du tableau
reset($tableau);
while (list($cle,$valeur) = each($tableau)) {
$t->set_var(array(
"ID"=>$cle,
"NOM"=>$valeur
) );
$t->parse("LISTE","ligne",true);
}
// fin du traitement des lignes du tableau
$t->pparse("MyOutput","page"); // traitement du modele
et affichage
?>
La ligne $t->parse(”LISTE”,”ligne”,true); introduit une petite variante par rapport au 1er exemple. Ici elle permet de créer une ligne du tableau à chaque passage dans la boucle while(). Le paramètre “true” est neccessaire ici pour afficher plusieurs lignes. Le tableau $tableau a en effet 3 lignes, et sans le paramètre true seule la dernière ligne serait affichée.
Enfin la fonction pparse() rassemble les fonction parse() et p(). La ligne $t->pparse(”MyOutput”,”page”); est équivalente aux 2 lignes suivantes :
Voilà une aperçu rapide des templates. Dans un prochain tutorial,
nous verrons que le deuxième exemple peut être aussi traité
avec les blocks, ce qui permet de n’utiliser qu’un fichier template
au lieu de deux.
Les templates ne se limitent pas aux pages html. on peut aussi générer
du xml, wml, texte des e-mails…. On peut par exemple avec le même
script php générer la version html et la version wml d’une
page en indiquant seulement un template différent.