HTML_Template_PHPLIB
est une version PEARisée de la
fameuse classe de template PHPLIB.
Il fourni des variables et des blocs reproduisibles.
Le code original de PHPLIB peut-être trouvé
sur phplib.sf.net.
Quand vous utilisez
HTML_Template_PHPLIB
pour générér du HTML ou un code depuis des modèles,
vous devez suivre les étapes suivantes:
Créer une instance de la classe template
Charger le fichier template
Définir les blocs
Initialiser les variables, parser les blocs
Terminer et afficher
Les Variables sont des placeholders
dans votre code HTML qui pourront être remplacée dynamiquement
par valeurs venant d'une base de donnée ou calculées dans votre code.
Voici un exemple de variable {CODE_AUTHOR}:
Vous entourez le nom de variable d'accolades.
Le nom de la variable peut contenir n'importe quel caractères autres que
les "blancs". (espace, tabulation, retour à la ligne)
Les Blocs mettent en évidence des morceaux de code HTML
et peuvent être réutilisés, p.e. une ligne <tr>
dans une table.
Les blocs sont définis en utilisant des commentaires HTML
contenant BEGIN ou END,
et le nom du bloc.
Example:
<table>
<caption>Auteurs</caption>
<thead>
<tr><th>Nom</th><th>Email</th></tr>
</thead>
<tbody>
<!-- BEGIN ligneAuteur -->
<tr><td>{AUTHOR_NAME}</td><td>{AUTHOR_EMAIL}</td></tr>
<!-- END ligneAuteur -->
</tbody>
</table>
Les fichiers template sont relatifs à un dossier
root configurable.
Vous pouvez le spécifier directement dans le constructeur
(premier paramètre, par défaut .)
ou avec la méthode setRoot().
Les fichiers sont référencés via des noms de handle.
Pour cela vous appelez la méthode setFile()et
spécifier le nom du handle en premier paramètre,
et le nom du fichier comme second paramètre.
Pour accélérer les choses, vous pouvez passer à la méthode
un tableau asssociatif de paires handle - nom de fichier.
Si vous voulez réutiliser certaines partie de votre code HTML plusieurs fois,
par exemple les lignes d'un tableau,
vous pouvez définir des blocs comme dans l'exemple décris ci-dessus.
Les blocs ne sont pas automatiquement détectés,
ils doivent être explicitement défini via la méthode
setBlock().
Cette méthode prend comme premier paramètre le handle du fichier
dans le quel le bloc est situé.
Le nom du handle qui défini le contenu du bloc en second paramètre.
Le nouvel handle de bloc en troisième paramètre.
Dans l'exemple de template
(disponible via le handle auteurs),
un bloc appelé ligneAuteur est défini.
Le handle du bloc est maintenant ligneAuteur_ref.
C'est une partie des plus facile :
Il suffit d'utiliser la méthode setVar()
avec un nom de variable et sa nouvelle valeur.
Un troisème paramètre optionnel booléen dit
s'il faut ajouter le nouveau contenu à l'ancien.
Par défaut, ce paramètre est à faux et le contenu est écrasé.
Une fois que toutes les variables d'un bloc sont initialiser,
you want to "save" them to be able to re-use the block another time.
La méthode parse() est ici bien pratique.
First parameter is the variable/handle in which the block content
shall be stored, second is the handle name of the block.
Le troisième paramètre précise s'il faut ajouter le contenu du bloc a
ce qui se trouve dans le handel cible.
S'il n'est pas donné la valeur false sera considerée.
mais c'est probablement ce que vous souhaitiez.
Dans cet exemple, le handle ligneAuteur_ref est remplis
avec le contenu du bloc ligneAuteur.
Si le dernier paramètre était à false
au lieu de true
on n'aurait au final que la dernière ligne.
Quand vous en avez fini avec les variables à initialiser
et les blocs à traiter, il est temps de d'envoyer le contenu à votre client.
En premier lieu, vous devez parse()r le contenu du
file handle into a new handle.
Pour supprimer toutes les variables et les blocs inutilisés,
vous devrez faire un appel à la méthode finish().
En fonction des valeurs passées au second paramètre du constructeur
unknowns
(ou passées plus tard via la méthode setUnknowns()),
les variables non initilaisée seront supprimées (remove),
conservées (keep)
ou mise dans un commentaire (comment).
Pour afficher votre HTML, vous pouvez utilise directement la valeur
ce que retourne la méthodefinish(),
ou utiliser la méthode get() pour récuperer le contenu.