Afin d'illustrer le principe, l'exemple utilise 3 fichiers: un gabarit HTML, une class moteur de template et un fichier php contrôleur.
Gabarit HTML contact.tpl
La mise en page et les styles sont regroupés dans un gabarit HTML. Les données qui seront affichées à l'internaute sont balisées avec les caractères {}.<html>
<head>
<title>Fiche de {NAME}</title>
</head>
<body>
<table>
<tr>
<td>Nom</td>
<td>{NAME}</td>
</tr>
<tr>
<td>Prenom</td>
<td>{FNAME}</td>
</tr>
<tr>
<td>Telephone</td>
<td>{CALLNUMBER}</td>
</tr>
</table>
</body>
</html>
Moteur de template TPLEngine.php
Class du moteur de template regroupant les fonctions de chargement du template et d'ajout de valeurs à afficher.<?php
/**
* Moteur de template basique
* Stocker et remplacer les champs dans la page HTML
*
* @author Fobec 2011
*/
class TPLEngine {
/**
* @var string the template buffer
*/
protected $output="";
/**
* @var array tableau des couples champs/valeurs
*/
private $dataset=array();
/**
* Charger le template à partir d'un fichier
*
* @param string $_file nom complet du fichier à ouvrir
*/
public function load($_file) {
$this->dataset=array();
if (!file_exists($_file)) {
throw new Exception("File $_file not found !!!");
}
$this->output=file_get_contents($_file);
}
/**
* Magic : fixer les couples champs/valeur
*
* @param string $name nom du champs
* @param string $value valeur
*/
public function addValue($key, $value) {
if (isset($this->dataset[$key])) {
$this->dataset[ $key ].="\n".$value;
} else {
$this->dataset[ $key ] = $value;
}
}
/**
* Assembler la page HTML pour l'affichage
* @return string code HTML
*/
public function __toString() {
$this->parse();
// $this->deleteUnusedTags();
return $this->output;
}
/**
* Remplacer les champs par la valeur pour l'ensemble du dataset
*/
private function parse() {
foreach ($this->dataset as $key => $val) {
$this->output=str_replace("{".$key."}", $val, $this->output);
}
}
}
?>
Génération d'une page HTML
Les étapes de génération d'une page HTML sont:- ouverture du gabarit HTML contact.tpl,
- ajout des valeurs à afficher (les données peuvent être chargées à partir de la base de données),
- remplacement des champs balisées {} par les données à afficher.
<?php
require_once 'tplengine.php';
$tplengine=new TPLEngine();
$tplengine->load("contact.tpl");
$tplengine->addValue('NAME', 'Duchemin');
$tplengine->addValue('FNAME', 'Georges');
$tplengine->addValue('CALLNUMBER', '12 34 56 78 90');
echo $tplengine;
?>
Points forts du système de template
Clarté du code: le code PHP est bien plus clair. La maintenance et les évolutions logiciel sont facilitées,Performance: en séparant le gabarit du code PHP, un développeur et un webdesigner peuvent travailler en même temps sur le projet,
Flexibilité: modifier l'apparence d'une page web devient chose facile car seul le gabarit HTML sera modifié. De plus, il existe de nombreux templates à télécharger sur le web, par exemple pour le CMS WordPress.