On est loin des Smarty ou autre templeet, mais l'idée de programmer son propre moteur de template peut être interessante, d'autant plus lorsque votre projet PHP est simple et ne demande donc pas l'utilisation des fonctions complexes de tels moteurs de templates. Vous gagnerez ainsi en rapidité d'execution et en consomation de ressource serveur.
Mais tout d'abord, qu'est ce qu'un moteur de template ?
Le moteur de template est un moyen élégant de séparer la forme, de la programmation (le fond). D'un côté vous aurez votre programmation PHP / ASP / etc. (dans notre cas PHP) et de l'autre vos différents fichiers templates correspondants à un modèle de mise en page.
La conception du projet d'une part, et la conception des pages d'autre part seront grandement facilité.
Immaginez une page PHP sans echo ""; ^^
Dans la même optique, fini les " au milieu du HTML :)
Quelques exemples parmis bien d'autres qui vous facilitent la vie lors de l'utilisation d'un moteur de template.
Rôle du moteur de template
Le moteur de template va simplement afficher la page que vous souhaitez, en d'autre terme, vous passerez en paramètre le nom du fichier à afficher et le moteur de template se charge du reste.
Vous avez en plus de cela la possibilité de faire afficher la valeur de retour d'une variable, chose pratique sinon vos pages aurez été statique :) Il vous faudra donc choisir un formalisme de notation des variables pour votre moteur de template. Dans l'exemple suivant, le voici : {variable}. La variable {variable} devra donc être remplacée par une valeur. Ce procédé se fait dans votre programmation PHP, juste avant d'afficher le contenu d'un fichier template.
Les données de la classe de votre moteur de template
En premier lieu votre fichier devra comporter l'entête de la classe, c'est à dire :
<?php
class template {}
?>
Les données vous aideront sans doute à comprendre ce qu'il faut stocker pour que le moteur de template fonctionne, les voici :
private $repertoireTemplate; private $contenuAAfficher; private $variablesAssigneesCle; private $variablesAssigneesValeur;
$repertoireTemplate contient le chemin vers le répertoire contenant vos fichiers template.
$contenuAAfficher représente le contenu de votre fichier template à afficher.
$variablesAssigneesCle c'est le nom de la variable du moteur de template à remplacer, dans notre cas ci-dessus ({variable}), il faudrait donc mettre en clé "variable".
$variablesAssigneesValeur; représente les valeurs de remplacement des variables du moteur de template.
Le contructeur de la classe
function __construct($repertoire) {
$this->repertoireTemplate = $repertoire;
$this->contenuAAfficher = "";
$this->variablesAssigneesCle = array();
$this->variablesAssigneesValeur = array();
}
Ce constructeur reçoit qu'un paramètre, le chemin vers le répertoire de vos fichiers templates.
Vous allez maintenant voir à quoi ressemble l'entête de votre fichier PHP :
<?php
require("template.class.php"); // moteur de template
$tpl = new template("templates/");
?>
Assigner une valeur PHP à une variable du moteur de template
La fonction suivante vous permettra d'assigner une clé à une valeur, la clé est le nom de votre variable dans le moteur de template, tandis que la valeur peut être une variable PHP, le résultat d'une requête, une simple chaîne de caractère.
function ajouteAccolade($val) {
return "{".$val."}";
}
function assigner($cle, $valeur) {
$cle = $this->ajouteAccolade($cle);
array_push($this->variablesAssigneesCle, $cle);
array_push($this->variablesAssigneesValeur, $valeur);
}
La fonction ajouteAccolade($val) est en lien avec la notation des variables que nous avons choisi. Si vous souhaitez la changer, c'est ici que ça se passe :)
assigner($cle, $valeur) quant à elle rajoute au tableau de clé et de valeur, les valeurs passées en paramètres. C'est à partir de ce tableau de clé et de valeur que nous ferons ensuite le changement des variables du moteur de template, juste avant d'afficher le contenu. Pour l'exemple (dans votre fichier PHP) :
$test = "Gnome";
$tpl->assigner("test", $test);
Afficher le contenu d'un fichier template et remplacer les variables par des valeurs
Voici le code de la fonction :
function ajouterTemplate($fichier) {
$this->contenuAAfficher = file_get_contents($this->repertoireTemplate.$fichier);
}
function afficher($fichier) {
$this->ajouterTemplate($fichier);
$this->contenuAAfficher = str_replace($this->variablesAssigneesCle, $this->variablesAssigneesValeur, $this->contenuAAfficher);
echo $this->contenuAAfficher;
$this->contenuAAfficher = "";
$this->variablesAssigneesCle = array();
$this->variablesAssigneesValeur = array();
}
La fonction ajouterTemplate($fichier) récupére tout le contenu du fichier template. afficher($fichier) quant à elle remplace les valeurs des clés par les valeurs des valeurs ^^ et affiche le résultat. Il faut penser à réinitialiser les variables à vide, sinon votre texte va se cumuler et je ne traiterai pas ce modèle de template ici. Certains en effet permettent d'enregistrer le contenu de plusieurs fichiers templates et de les afficher tous à la fin.
Toujours avec la même simplicité, voila comment faire afficher le contenu d'un fichier template dans votre navigateur. Tout d'abord il vous faut éditer votre premier fichier template :
Hello World!
(Ca fait geek ça)
{test} applets are nice!
Vous enregistrerez ce dernier dans votre répertoire de templates sous un nom quelconque.
Du côté PHP, voici ce que ça donne :
<?php
require("template.class.php"); // moteur de template
$tpl = new template("templates/");
$test = "Gnome";
$tpl->assigner("test", $test);
$tpl->afficher("nomdufichiertemplate.tpl");
?>
{test} va être remplacé par Gnome dans notre exemple, ce qui donnera au final :
Hello World! (Ca fait geek ça) Gnome applets are nice!
Code complet du moteur de template
<?php
class template {
private $repertoireTemplate;
private $contenuAAfficher;
private $variablesAssigneesCle;
private $variablesAssigneesValeur;
function __construct($repertoire) {
$this->repertoireTemplate = $repertoire;
$this->contenuAAfficher = "";
$this->variablesAssigneesCle = array();
$this->variablesAssigneesValeur = array();
}
function ajouterTemplate($fichier) {
$this->contenuAAfficher = file_get_contents($this->repertoireTemplate.$fichier);
}
function assigner($cle, $valeur) {
$cle = $this->ajouteAccolade($cle);
array_push($this->variablesAssigneesCle, $cle);
array_push($this->variablesAssigneesValeur, $valeur);
}
function ajouteAccolade($val) {
return "{".$val."}";
}
function afficher($fichier) {
$this->ajouterTemplate($fichier);
$this->contenuAAfficher = str_replace($this->variablesAssigneesCle, $this->variablesAssigneesValeur, $this->contenuAAfficher);
echo $this->contenuAAfficher;
$this->contenuAAfficher = "";
$this->variablesAssigneesCle = array();
$this->variablesAssigneesValeur = array();
}
function setRepertoireTemplate($repertoire) {
$this->repertoireTemplate = $repertoire;
}
}
?>
Conclusion
Les moteurs de templates du style Smarty ou Templeet, vous permettront évidemment de faire beaucoup plus, puiqu'il vous sera possible d'intégrer un code ressemblant au PHP directement dans vos fichiers templates, ce qui vous permettra par exemple d'effectuer une boucle foreach ou un if. Ces moteurs de template compilent un fichier PHP à partir des informations renseignées dans le fichier template. Ils conservent donc une trace et permettent un système de cache.
Donc le moteur de template que je viens de vous présenter là est beaucoup moins complet, mais ne fait que 45 lignes de codes lol :)
Pour information, cette technique n'est peut être pas la meilleure, ou peut être déjà connue, je ne sais pas, mais bon, on fait partager, ce qu'on peut faire partager :)
j'espère que cet article n'est pas trop décousu et qu'il vous aidera.










Play
Joli !! Bravo ! Super le nouveau design ! Je vois que ça bouge pas mal :-)
le 21 avril 2005 14:08
Thalion
Ce qui est clair c'est que tous les informaticiens qui aiment le CSS ont aimé le design du site par contre les autres ... ;)
Sinon comme c'est un de mes permiers articles, je ne suis pas sûr qu'il soit entièrement compréhensible ou qu'on me suive tout le temps dans ce que je veux montrer, qu'en as tu pensé ?
Merci d'avance ;)
le 22 avril 2005 11:04
Play
Moi je le trouve très bien. C'est clair. N'hésite pas à en faire d'autres ! :-)
le 22 avril 2005 22:10
Thalion
Oki merci ;)
Le prochain à venir en PHP sera l'utilisation du moteur de template Smarty.
le 23 avril 2005 00:36
PiTiLeZarD
J'avais jamais commenté ce billet mais il est excellent pour comprendre comment tout ça ça marche ... j'ai fait lien dans un de mes billets tellement je trouve ça instructif !!!
le 2 juin 2005 08:32
Thalion
Salut PiTiLeZarD,
Ben merci beaucoup pour ton commentaire :) Ca fait plaisir ! Comme tu as pu le remarquer on est quand même bien loin d'un système à la Smarty, mais c'est toujours bien de connaître la base :)
A+
le 3 juin 2005 17:20
Ben
Faudra que je revienne lire ça en détail... ;-)
le 26 juin 2005 16:04
Pololand
Un moteur de template avec le DOM... Tout les moteurs de templates en php que j'ai trouvé sur le web fonctionne a peu près sur le même principe, recheche et remplacement de tags par expression régulière, des variables et des blocs pour faire des boucles.
le 12 février 2006 20:27
highs
merci pour ton travail ! enfin !!! les bases de mon moteur de template !!!
le 8 novembre 2006 15:18