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.
1 De niz -
Salut, je voudrais savoir si il existe une liste de toutes les balises
et <tpl:…> </tpl:…> quelque part.2 De Franck -
En ce qui concerne celles qui sont mises à disposition par DotClear 2, il y a une documentation en cours d'écriture ici. En attendant qu'elle soit complète, il est utile de consulter le fichier
class.dc.template.php
(répertoireinc/public/
) où elles sont toutes codées.À savoir : Les plugins et les thèmes peuvent également ajouter leurs propres jeux de balises.
3 De niz -
merci de ta réponse. Je vais aller y jeter un oeil.
4 De cerealkiller -
Bonjour,
Avant, avec Dotclear 1, j'avais coupé le template au niveau de l'affichage du "content" du blog, et l'avait collé dans un fichier externe. Cela me permettait à la place de mettre un simple switch sur une option passée en GET en php et d'insérer du contenu alternatif au déroulé de billets (page de contact, etc...). Bref, d'autres pages ! là je viens d'installer dotclear 2, et je suis un peu paumé... Comment ajouter des liens vers des pages fixes autres que des billets ?? ça m'a l'air quand même bien mal fichu ce nouveau système de template... enfin quand on le comprend pas !
Merci d'avance
5 De Franck -
Le meilleur moyen de proposer des pages alternatives est d'utiliser le plugin Related (pages connexes). Il a été développé spécialement pour cela.
6 De Bienvenu Isaac Kanyos -
Je cherche un bon petit tutoriel qui peut me servir à débuter le développemnt avec les balises de dotclear. Je vous serai reconnaissant si vous me l’envoiez ou me guider à le trouver.
7 De zenielle -
le “site du zero” peut-être…
8 De adjaya -
Je viens de tester l’imbrication de tpl Block, c’est donc maintenant implémenté.
9 De Franck -
Oui ça fait quelques années déjà :-)