DotClear 2 et les templates (4)

Vous savez maintenant qu'il y a deux formes de balises pour les templates, les simples ({{tpl:…}}) et les blocs (<tpl:…> et </tpl:…>).

Une des précautions à prendre à propos des blocs est qu'il ne faut pas imbriquer deux blocs de même nom. Je m'explique sur un exemple. Voyez le code suivant :

1. <tpl:PaginationIf start="1">
2.   <div id="intro">
3.   <p>Début du blog</p>
4.   <tpl:PaginationIf end="1">
5.     <p>Fin du blog</p>
6.   </tpl:PaginationIf>
7.   </div>
8. </tpl:PaginationIf>

Logiquement il signifie ceci :

Si c'est la première page alors on ouvre une <div> avec un texte particulier (Début du blog), puis, si de plus, c'est également la dernière page — donc il n'y a qu'une page, alors on rajoutera un autre texte (Fin du blog). Chacune des conditions est testée à l'aide d'une balise intitulée <tpl:PaginationIf …>.

Au moment d'interpréter les balises <tpl:…> pour les remplacer par le code PHP nécessaire, DotClear 2 va trouver la première balise sur la ligne 1. C'est une balise ouvrante et il va ensuite chercher la première balise fermante de même nom. Celle-ci se trouve sur la ligne 6. Ce sont donc les lignes 2 à 5 qui vont dépendre de la condition testée à la ligne 1 :

1. <tpl:PaginationIf start="1">
2.   <div id="intro">
3.   <p>Début du blog</p>
4.   <tpl:PaginationIf end="1">
5.     <p>Fin du blog</p>
6.   </tpl:PaginationIf>
7.   </div>
8. </tpl:PaginationIf>

Bien sûr DotClear 2 va traiter ces lignes pour éventuellement y chercher des balises templates à remplacer, et il va trouver celle qui se trouve sur la ligne 4, seulement cette balise n'a pas de balise fermante associée et par conséquent sera ignorée.

Une fois ce premier bloc de balise traité (lignes 1 à 6), DotClear 2 va traiter la suite — c'est à dire les lignes 7 à 8, y trouver une balise fermante sur la ligne 8 mais comme aucune balise ouvrante n'a été trouvée auparavant, elle sera également ignorée :

Conclusion nous allons nous retrouver avec le code suivant (l'emphase est mise sur les balises non traitées)[1] :

1. <?php if (page_courante == 1) : ?>
2.   <div id="intro">
3.   <p>Début du blog</p>
4.   <tpl:PaginationIf end="1">
5.     <p>Fin du blog</p>
6.   <?php endif; ?>
7.   </div>
8. </tpl:PaginationIf>

C'est ce code qui va être ensuite pris en charge par le serveur pour interpréter le code PHP inséré et il va ignorer les balises laissées par DotClear 2, éventuellement en vous gratifiant d'un petit message au passage. Bref pas glop !

Donc pour résumer, si vous utilisez une balise ouvrante quelque part, pensez à insérer la balise fermante correspondante avant de la réutiliser. Parfois cette limitation peut poser problème et je vous expliquerai dans un prochain billet comment écrire vos propres balises pour palier ce problème.

Notes

[1] La ligne 1 est un exemple de code PHP plausible mais n'est pas la ligne réellement insérée par DotClear 2. J'ai préféré mettre quelque chose de simple pour éviter d'encombrer la démonstration.

Ajouter un commentaire

Les champs suivis d'un * sont obligatoires

Les commentaires peuvent être formatés en utilisant la syntaxe Markdown Extra.

Ajouter un rétrolien

URL de rétrolien : https://open-time.net/trackback/3110

Haut de page