doSimple Les modèles HTML avec TempLight

Dernière modification le 30 August 2006

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

Auteur
Batiste Bieler
Licence
LGPL