Savant3 est un système de template "minimaliste" pour PHP5.
Contrairement à certains autres systèmes de template, Savant ne rajoute pas une couche d'abstraction au dessus de PHP, il ne "compile" pas ses templates en PHP, et ne nécessite pas l'apprentissage d'un nouveau language pour générer un template.
Au lieu de cela, Savant utilise directement PHP en tant que language natif, ce qui le rends extrèmement léger et puissant (il profite ainsi de toutes les fonctions disponibles en PHP).
A la demande de mon ami Claude, voyons comment générer, à l'aide de ce système, un fichier RDF pour XUL :
Tout d'abord, le template (rdf.tpl.php) :
<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:ANIMALS="http://www.example.com/rdf#">
<RDF:Seq RDF:about="http://www.example.com/all-animals">
<?php foreach ($this->animals AS $animal) { ?>
<RDF:li>
<RDF:Description RDF:about="http://www.example.com/<?php echo htmlspecialchars($animal['name']); ?>">
<ANIMALS:name><?php echo htmlspecialchars($animal['name']); ?></ANIMALS:name>
<ANIMALS:species><?php echo htmlspecialchars($animal['species']); ?></ANIMALS:species>
<ANIMALS:class><?php echo htmlspecialchars($animal['class']); ?></ANIMALS:class>
</RDF:Description>
</RDF:li>
<?php } ?>
</RDF:Seq>
</RDF:RDF>
Maitenant, voyons le code PHP qui va nous permettre de remplir ce template avec des données provenant d'une source de données externe (base de données par ex.).
<?php
// Récupére les données qui vont venir alimenter le template
$from_db = array(
array('name'=>'Lion', 'species'=>'Panthera leo', 'class'=>'Mammal'),
array('name'=>'Tarantula', 'species'=>'Avicularia avicularia', 'class'=>'Arachnid'),
array('name'=>'Hippopotamus', 'species'=>'Hippopotamus amphibius', 'class'=>'Mammal')
);
// Crée une nouvelle instance du systeme template Savant3
require_once 'Savant3.php';
$template = new Savant3();
// Assigne les données dynamiques au template
$template->assign('animals', $from_db);
// Affiche le template généré
echo $template->fetch('./rdf.tpl.php');
?>
et voilà, le tour est joué.