doSimple Les modèles HTML avec TempLight
Les modèles HTML avec TempLight (Template)
Arpès la création de la petite classe de génération de texte Template il est devenu important pour moi de lui apporter quelques améliorations afin d'élagir ses possibilités d’utilisation.
La classe de template a été mise à jour et a son popre site web : Templating language for PHP : TempLight 1.0
Attention : cette classe fonctionne uniquement avec PHP5.
Fonctions de base de la classe
Les fonctions de bases sont toujours les même :
- replace(balise, texte)
- Remplace la balise TempLight par le texte désiré
- iterateReplace(balise, tableauAssociatif)
- Boucle sur la structure TempLight itérative et remplace les balises par les valeurs du tableau associatif
- recursiveReplace(balise, tableauAssociatif)
- Remplace la structure TempLight récursive par le tableau associatif imbriqué. Pratique pour créer des structures arborescentes.
Langage TempLight
Les nouveautées se trouvent dans la richesse du langage TempLight :
- if, elseif, else, endif
- Des structures de contrôle permettent varier la génération de texte. Elles sont sensiblement améliorées par rapport à l’implémentation précédante car elles permettent d’en imbriquer un nombre quelconque.
- include
- Permet d’inclure dynamiquement un nouveau fichier dans le fichier courant.
- lang
- Gestion de la langue
- currentNode
- Le noeud courant est représenté par l’objet
currentNode. Il est enrichi d’une dizaine de fonctions utiles. Ces fonctions sont utilisable dans les conditions uniquement.
Fonctions de currentNode
Les fonctions de currentNode sont les suivantes :
- field(clef)
- Retourne la valeur du champs associé à clef.
- fieldExists(clef)
- Retourne vrai si la valeur du champs associé à clef existe.
- child(n)
- Retourne le nème enfant.
- brother(n)
- Retourne le nème frère de ce noeud. Les valeurs négative sont acceptées.
- parentNode()
- Retourne le parent.
- number()
- Retourne la position du noeud dans son parent.
- level()
- Retourne le niveau du noeud dans l’arbre
- isFirst()
- Retourne vrai si ce noeud est le premier enfant de son parent
- isLast()
- Retourne vrai si ce noeud est le dernier enfant de son parent
- nbBrother()
- Retourne le nombre de frère
- nbChildren()
- Retourne le nombre d’enfant
Ces fonctions sont à utiliser dans les conditions uniquement.
Exemple
PHP
Cet exemple est volontairment compliqué afin de montrer toutes les fonctionnalités de la classe. Si vous désirez un tutoriel plus progressif, je vous conseil l’article qui concerne l’ancienne classe.
<?php
require('templight.class.php');
$tpl = new TempLight('test.tpl.html','fr');
$listesArray =
array(
array('texte'=>'catégorie 1',
array( 'texte'=>'hello' ),
array( 'texte'=>'world' ),
array( 'texte'=>'ça va le bocale ?' )
),
array('texte'=>'catégorie 2',
array( 'texte'=>'hello' ),
array( 'texte'=>'hello',
array( 'texte'=>'hello' ),
array( 'texte'=>'hello' ),
array( 'texte'=>'hello' ),
array( 'texte'=>'world again' )
),
array( 'texte'=>'world' ),
array( 'texte'=>'ça va le bocale ?' )
)
);
$tpl->recursiveReplace('listeImbriquee',$listesArray );
$tpl->iterateReplace('boucle',$listesArray );
echo $tpl->toString();
?>
Fichiers TempLight
test2.tpl.html :
<!--{lang:fr}-->
Salut les enfants !
<!--{endLang:fr}-->
<!--{lang:en}-->
Hi kids !
<!--{endLang:en}-->
test1.tpl.html :
<!--{include:test2.tpl.html}-->
<!--{recursion:listeImbriquee}-->
<!--{if:currentNode.level()==1}-->
<!--{loop}-->
<h1><!--texte--></h1>
<!--{recursion}-->
<!--{endLoop}-->
<!--{else}-->
<ul>
<!--{loop}-->
<li>
<!--{if:currentNode.brother(1).field('texte')=='world'}-->
<span style="color:blue">Le frère suivant a comme texte 'world' : </span>
<!--{endIf}-->
<!--{if:currentNode.field('texte')=='world'}-->
<span style="color:green">Je suis world : </span>
<!--{endIf}-->
<!--texte--><!--{recursion}-->
</li>
<!--{endLoop}-->
</ul>
<!--{endIf}-->
<!--{endRecursion:listeImbriquee}-->
<hr />
<ul>
<!--{loop:boucle}-->
<li>
<!--{if:currentNode.number()==2}-->
<span style="color:green">Je suis le deuxième noeud dans la liste : </span>
<!--{endIf}-->
<!--texte-->
</li>
<!--{endLoop:boucle}-->
</ul>
Résultat
Liens
- Télécharger le code source de la classe et l’exemple.
- L’ancienne implémentation ;
- Template selon Wikipedia.
- Auteur
- Batiste Bieler
- Licence
- LGPL