<?xml version="1.0" encoding="iso-8859-1"?>
<document>
   <titre>Les modèles HTML avec TempLight</titre>
   <contenu>
      <h2>Les modèles HTML avec TempLight (Template)</h2>
       
      <p class="abstract">
       Arpès la création de <a href="../Template/">la petite classe de génération de texte Template</a> il 
      est devenu important pour moi de lui apporter quelques améliorations afin d'élagir ses possibilités d’utilisation.
      </p>

      <p style="color:red">Attention : cette classe fonctionne uniquement avec PHP5.</p>

      <h2>Fonctions de base de la classe</h2>

      <p>Les fonctions de bases sont toujours les même : </p>

      <dl>
      <dt>replace(balise, texte)</dt>
         <dd>Remplace la balise TempLight par le texte désiré</dd>
      <dt>iterateReplace(balise, tableauAssociatif)</dt>
         <dd>Boucle sur la structure TempLight itérative et remplace les balises par les valeurs du tableau associatif</dd>
      <dt>recursiveReplace(balise, tableauAssociatif)</dt>
         <dd>Remplace la structure TempLight récursive par le tableau associatif imbriqué. Pratique pour créer des structures arborescentes.</dd>
      </dl>

    <h2>Langage TempLight</h2>

     <p>Les nouveautées se trouvent dans la richesse du langage TempLight : </p>

      <dl>
       <dt>if, elseif, else, endif</dt>
        <dd>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.</dd>
       <dt>include</dt>
        <dd>Permet d’inclure dynamiquement un nouveau fichier dans le fichier courant.</dd>
       <dt>lang</dt>
        <dd>Gestion de la langue</dd>
       <dt>currentNode</dt>
        <dd>Le noeud courant est représenté par l’objet <code>currentNode</code>. Il est enrichi d’une dizaine de fonctions utiles. Ces fonctions sont utilisable dans les conditions uniquement.</dd>
      </dl>

    <h3>Fonctions de <code>currentNode</code></h3>

     <p>Les fonctions de currentNode sont les suivantes : </p>

      <dl>
       <dt>field(clef)</dt>
        <dd>Retourne la valeur du champs associé à clef.</dd>
       <dt>fieldExists(clef)</dt>
        <dd>Retourne vrai si la valeur du champs associé à clef existe.</dd>
       <dt>child(n)</dt>
        <dd>Retourne le n<sup>ème</sup> enfant.</dd>
       <dt>brother(n)</dt>
        <dd>Retourne le n<sup>ème</sup> frère de ce noeud. Les valeurs négative sont acceptées.</dd>
       <dt>parentNode()</dt>
        <dd>Retourne le parent.</dd>
       <dt>number()</dt>
        <dd>Retourne la position du noeud dans son parent.</dd>
        <dt>level()</dt>
        <dd>Retourne le niveau du noeud dans l’arbre</dd>
       <dt>isFirst()</dt>
         <dd>Retourne vrai si ce noeud est le premier enfant de son parent</dd>
        <dt>isLast()</dt>
         <dd>Retourne vrai si ce noeud est le dernier enfant de son parent</dd>
       <dt>nbBrother()</dt>
         <dd>Retourne le nombre de frère</dd>
        <dt>nbChildren()</dt>
         <dd>Retourne le nombre d’enfant</dd>
      </dl>

<p>Ces fonctions sont à utiliser dans les conditions uniquement.</p>

    <h2>Exemple</h2>

<h3>PHP</h3>

<p>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 <a href="http://dosimple.ch/Template/">l’article qui concerne l’ancienne classe</a>.</p>

<pre>
&lt;?php
require('templight.class.php');
$tpl = new TempLight('test.tpl.html','fr');

$listesArray =
array(
   array('texte'=&gt;'catégorie 1', 
      array( 'texte'=&gt;'hello' ),
      array( 'texte'=&gt;'world' ),
      array( 'texte'=&gt;'ça va le bocale ?' )
      ),
   array('texte'=&gt;'catégorie 2',
      array( 'texte'=&gt;'hello' ),
      array( 'texte'=&gt;'hello', 
         array( 'texte'=&gt;'hello' ),
         array( 'texte'=&gt;'hello' ),
         array( 'texte'=&gt;'hello' ),
         array( 'texte'=&gt;'world again' )
      ),
      array( 'texte'=&gt;'world' ),
      array( 'texte'=&gt;'ça va le bocale ?' )
   )
);

$tpl-&gt;recursiveReplace('listeImbriquee',$listesArray );
$tpl-&gt;iterateReplace('boucle',$listesArray );
echo $tpl-&gt;toString();
?&gt;
</pre>

<h3>Fichiers TempLight</h3>

<p>test2.tpl.html : </p>

<pre>
&lt;!--{lang:fr}--&gt;
Salut les enfants !
&lt;!--{endLang:fr}--&gt;

&lt;!--{lang:en}--&gt;
Hi kids !
&lt;!--{endLang:en}--&gt;
</pre>

<p>test1.tpl.html : </p>

<pre>
&lt;!--{include:test2.tpl.html}--&gt;

&lt;!--{recursion:listeImbriquee}--&gt;
&lt;!--{if:currentNode.level()==1}--&gt;
   &lt;!--{loop}--&gt;
      &lt;h1&gt;&lt;!--texte--&gt;&lt;/h1&gt;
      &lt;!--{recursion}--&gt;
   &lt;!--{endLoop}--&gt;
&lt;!--{else}--&gt;
   &lt;ul&gt;
   &lt;!--{loop}--&gt;
   &lt;li&gt;
   &lt;!--{if:currentNode.brother(1).field('texte')=='world'}--&gt;
   &lt;span style="color:blue"&gt;Le frère suivant a comme texte 'world' : &lt;/span&gt;
   &lt;!--{endIf}--&gt;
   &lt;!--{if:currentNode.field('texte')=='world'}--&gt;
   &lt;span style="color:green"&gt;Je suis world : &lt;/span&gt;
   &lt;!--{endIf}--&gt;
   &lt;!--texte--&gt;&lt;!--{recursion}--&gt;
   &lt;/li&gt;
   &lt;!--{endLoop}--&gt;
   &lt;/ul&gt;
&lt;!--{endIf}--&gt;
&lt;!--{endRecursion:listeImbriquee}--&gt;

&lt;hr /&gt;

&lt;ul&gt;
&lt;!--{loop:boucle}--&gt;
   &lt;li&gt;
   &lt;!--{if:currentNode.number()==2}--&gt;
   &lt;span style="color:green"&gt;Je suis le deuxième noeud dans la liste : &lt;/span&gt;
   &lt;!--{endIf}--&gt;
   &lt;!--texte--&gt;
   &lt;/li&gt;
&lt;!--{endLoop:boucle}--&gt;
&lt;/ul&gt;
</pre>

<h3>Résultat</h3>

<ul>
<li><a href="result.html">Le résulat est ce petit bout de fichier HTML</a> ;</li>
<li><a href="tempLight.zip">Télécharger le code source de la classe et l’exemple</a>.</li>
</ul>

 </contenu>
      
<zone>

       <h3>Liens</h3>
       <ul>
          <li><a href="tempLight.zip">Télécharger le code source de la classe et l’exemple</a>.</li>
          <li><a href="../Template">L’ancienne implémentation</a> ;</li>
          <li><a href="http://fr.wikipedia.org/wiki/Template">Template selon Wikipedia</a>.</li>
          
       </ul>
       <dl>
       <dt>Auteur</dt>
       <dd>Batiste Bieler</dd>
       <dt>Licence</dt>
       <dd><a href="http://fr.wikipedia.org/wiki/LGPL">LGPL</a></dd>
       </dl>
      
   </zone>
</document>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              		