Les templates : moteurs et languages
site officiel
tpln.sourceforge.net
"TPLN est un moteur de template en Php pour Php. Le code Php est séparé du design ce qui permet un facilité de mise à jour du design de vos documents et de permettre également de séparer les tâches entre le développeur Php et le Webdesigner." Dixit son auteur, Hayoun Laurent.
TPLN utilise des classes d'objets et se fonde sur la classe d'abstraction PEAR::DB pour gérer les bases de données. Ainsi, si on souhaite changer de SGBD lors d'un projet, l'écriture des requêtes SQL en est grandement simplifiée.
Attention, les classes PEAR doivent être installées et configurées au préalable sur le serveur. Si vous utilisez EasyPHP, l'activation peut se faire rapidement via le fichier phpinit.exe dans le répertoire d'installation de EasyPHP. Dans tous les cas, Windows, MacOS ou Linux, le fichier php.ini est celui qui contient la configuration des extentions à PHP.
Pour distinguer les fichiers templates TPLN de fichiers HTML ordinaires, j'ai adopté la convention nom_fichier.tpln.html qui a l'avantage d'être facilement modifiables par les éditeurs web. Pour une sécurité poussée, ce pourrait être des fichiers tpln.php avec un entête de protection.
A la manière de PHPlib, la déclaration des variables se fait à l'aide
des accolades {variable_du_template}
au sein de votre fichier
template. Très intéressant, on peut aussi directement utiliser
une variable courante du script PHP, sans avoir à la parser, de la
façon suivante : {$variable_php}
.
Attention, les caractères suivants sont interdits entre les accolades
sous risque d'erreur : "
, '
, *
, "
", \n
, \t
.
<!-- fichier mapage.tpln.html -->
<html>
<body>
{texte_a_parser}
<p>De la part de {$auteur}</p>
{note}
</body>
</html>
Il ne reste plus qu'à faire ceci dans le script php. On a le choix
de la méthode parse()
ou fastparse()
.
<!-- fichier mapage.php --> <?php // variables du script $auteur = "M. Déro"; $notes = "<hr /><p>Ceci est le premier exercice en TPLN</p>"; // on inclut la classe TPLN require_once("include/TPLN.php");
// on crée un nouvel objet $TPLN = new TPLN; // On ouvre le template $TPLN->Open("mapage.tpln.html"); // on parse la variable $TPLN->Parse("texte_a_parser","<p>Bonjour à tous. <br />Bonne découverte de TPLN</p>");
// on peut parser directement la variable $note si elle a le même nom dans le template $TPLN->FastParse("note"); // on termine en écrivant le résultat $TPLN->Write(); ?>
Les blocs sont assimilables aux calques en HTML. On peut par exemple y utiliser des variables de même noms mais avec des contenu différents.
Dans PHPlib, la déclaration d'un bloc se fait en utilisant les balises
commentaires <!-- -->
. TPLN utilise quant à lui
un tag personnel <bloc::nom_du_bloc>
et </bloc::nom_du_bloc>
.
Chez certains éditeurs HTML, tel que Dreamweaver, il est conseillé de
désactiver les corrections à la volée du code pour éviter quelques ennuis.
Là encore les caractères "
, '
, *
, "
", \n
, \t
sont
interdits sous risque d'erreur.
<!-- fichier mapage2.tpln.html -->
<html>
<body>
<bloc::bloc1>
{texte_a_parser}
</bloc::bloc1>
<p>De la part de {$auteur}</p>
<bloc::bloc2>
{texte_a_parser}
</bloc::bloc2>
</body>
</html>
Dans le script PHP, le parsage est légèrement modifié.
On fait précéder de la variable template le nom du bloc suivi
d'un point (bloc1.texte_a_parser
).
<!-- fichier mapage2.php --> <?php // variables du script $auteur = "M. Déro"; // on inclut la classe TPLN require_once("include/TPLN.php");
// on crée un nouvel objet $TPLN = new TPLN; // On ouvre le template $TPLN->Open("mapage2.tpln.html"); // on parse la variable du premier bloc $TPLN->Parse("bloc1.texte_a_parser","<p>Bonjour à tous. <br />Bonne découverte de TPLN</p>");
// on parse la variable du second bloc $TPLN->Parse("bloc2.texte_a_parser","<p>Ce fichier comporte deux blocs de données, chacun utilisant {texte_a_parser}</p>"); // on termine en écrivant le résultat $TPLN->Write(); ?>
...
Texte emprunté au site officiel.
La fonction ShowRecords() est une fonction qui permet de parser automatiquement les données provenant de votre base données, vous n'avez qu'à créer votre template et la fonction s'occupe de tout pour vous !
Elle fonctionne selon deux modes :
Le template doit impérativement utiliser les déclarations de blocs suivants :
<bloc::data>
<bloc::loop></bloc::loop>
contient
le nom de vos champs en variable<bloc::norecord></bloc::norecord>
contient le message s'il
n'y a pas de résultats</bloc::data>
Cette fonction possède ses variables propriétaires qui sont
parsées automatiquement celles ci doivent être présentes
dans le bloc <bloc::data></bloc::data>
elles sont notées
comme ceci {_Variable}
.
_First
indique le numéro du
premier enregistrement de la page en cours _Last
indique le numéro
du dernier enregistrement de la page en cours _Count
indique le nombre
de résultats_PageNumber
indique la page actuelle_PageCount
indique le nombre de page totalVariables propriétaires entre les balises <bloc::loop></bloc::loop>
_Id
indique le numéro d'enregistrement généré par
TPLN _NavColor
remplace par l'une des deux
couleurs spécifiées
dans le fichier TPLN_Cfg.php ou par SetNavColor()
TPLN génère également pour vous les boutons de navigation
(pagination incluse) , il faut les définir au sein de votre bloc <bloc::data>
sous
forme de bloc, ceci sont personalisables puis qu'il font parti du template
:
* Pager pour créer la pagination de résultats, ce bloc doit
contenir deux sous blocs, <bloc::in>
et <bloc::out>
<bloc::in>
est généré pour
personaliser la page en cours, ce bloc doit contenir la variable {_Page}
<bloc::out>
est généré pour
personaliser les pages differentes de la page en cours, ce bloc
doit contenir la variable {_Url}
et {_Page}
<bloc::pager> <bloc::in><font color="red">{_Page}</font></bloc::in> <bloc::out><a href="{_Url}">{_Page}</a></bloc::out> </bloc::pager>
* Début pour aller à la première page de résultats,
ce bloc doit contenir la variable {_Url}
<bloc::start> <a href="{_Url}"><img src="bng.gif" /></a> < /bloc::start>
* Précédent pour aller à la page des résultats
précédente, ce bloc doit contenir la variable {_Url}
<bloc::previous> <a href="{_Url}"><img src="prev.gif" /></a> </bloc::previous>
* Suivant pour aller à la page des résultats suivante, ce
bloc doit contenir la variable {_Url}
<bloc::next> <a href="{_Url}"><img src="suiv.gif" /></a> </bloc::next>
* Fin pour aller à la dernière page de résultats,
ce bloc doit contenir la variable {_Url}
<bloc::end> <a href="{_Url}"><img src="suiv.gif" /></a> </bloc::end>
<?php
include("TPLN/TPLN.php");
$TPLN = new TPLN;
$TPLN->Open("template.html");
$query = "SELECT * FROM my_table";
$TPLN->DbConnect();
$TPLN->ShowRecords($query,10); // 10 résultats par page
$TPLN->DbClose();
$TPLN->Write();
?>