Les templates Kesako ?

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 :

<?
include "template.inc";
$nom="tarzan";
$t = new Template("."); // création du template $t
$t->set_file("page","template.tpl"); // on définit le fichier contenant le modèle
$t->set_var("NOM",$nom); // on indique que l'on doit remplacer {NOM} par le contenu de la variable $nom
$t->parse("MyOutput","page"); // traitement du modele
$t->p("MyOutput"); // on affiche la page complète
?>

c’est une exemple volontairement très simple, mais vous avez là pratiquement toutes les fonctions des templates. Décryptons un peu ce code. La première ligne inclut le fichier template.inc livrée avec la PHPLib, c’est lui qui contient les fonctions neccesaires pour utiliser les templates. En fait c’est une classe (voir le tutorial sur phpinfo.net), et il faut donc créer un objet pour pouvoir utiliser les fonctions de la classe.

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) :

```

{LISTE}
`` `

il nous faut un deuxième template qui correspond à la présentation d’une ligne du tableau (ligne.tpl) :

{ID} : {NOM}

Maintenant voyons le script pour afficher le tableau (test2.php):

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 ?>

J’ai introduit ici quelques différences. Tout d’abord, j’ai placé les fichier templates dans un dossier spécial nommé tpl. la création de l’objet est donc $t = new Template(« tpl/ »); Comme on utilise 2 templates, on doit le spécifier dans le script. Plutôt que de faire 2 fois appel à la fonction set_var(), on passe un tableau en paramètres. Les fonctions set_file() et set_var() permettent en effet de passer un tableau en paramètre ce qui est parfois bien utile.

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 :

$t->parse("MyOutput","page");
$t->p("MyOutput");

Conclusion

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.