Je continue ma petite série sur les templates utilisés pour les thèmes de Dotclear 2. Je vous avais parlé dans ce premier billet des deux formes de balises spécifiques aux templates :
- celles qui sont sous la forme {{tpl:…}}
- celles qui sont sous la forme <tpl:…> et </tpl:…>
Ces balises sont remplacées par Dotclear 2 par des instructions PHP qui seront ensuite traitées par le serveur.
La première forme est principalement utilisée pour générer du contenu comme par exemple l'affichage de la description du blog dans l'entête avec la balise suivante :
{{tpl:BlogDescription}}
Que va faire Dotclear 2 avec cette balise ? Et bien il va simplement la remplacer par le code PHP suivant :
<?php echo context::global_filter($core->blog->desc,0,0,0,0,0); ?>
Ensuite le serveur interprètera cette instruction qui sert à récupérer la description du blog dans la base de donnée et à l'afficher[1].
La deuxième forme, composée de deux balises, une ouvrante (<tpl:…>
) et une fermante (</tpl:…>
), permet principalement de traiter un contenu HTML[2] seulement si une condition est remplie (balise de test) ou autant de fois que nécessaire (balise de boucle).
Deux exemples, un pour pour chaque type :
Imaginons que je souhaite afficher un texte uniquement si on se trouve sur la page numéro 1 du blog et pas sur les suivantes. Je vais utiliser le code suivant dans mon thème :
<tpl:PaginationIf start="1"> <p>Un joli texte affiché uniquement sur la première page.</p> </tpl:PaginationIf>
La première balise permet de tester une condition, ici Est-on au début de la pagination, c'est-à-dire sur la page 1 ?
. Ensuite nous trouvons le contenu qui sera traité uniquement si la condition est remplie, puis une balise qui indique la fin de ce qui est dépendant de la condition testée.
Imaginons maintenant que je souhaite afficher les 10 derniers billets d'une catégorie. Je vais utiliser le code suivant :
<tpl:Entries category="Flash" lastn="10"> … <!-- affichage du contenu du billet (titre, introduction, …) --> … </tpl:Entries>
La première balise permet de définir ce qu'on veut récupérer, ici les 10 derniers billets (lastn="10"
) de la catégorie Flash (category="Flash"
). Puis pour chacun de ces 10 billets, tout ce qui se trouve jusqu'à la balise de fin (</tpl:Entries>
) sera répété.
J'espère que c'est suffisamment clair pour tout le monde. Si vous avez tout compris jusqu'ici et bien vous savez tout (ou presque) du système de template de Dotclear 2.
Commentaires
Bonjour merci pour cet article clair et concis au possible.
Je souhaiterais faire la chose suivante :
@@<tpl:Entries category="
" lastn="10"><!
Code></tpl:Entries>@@
Mais ça ne marche pas car la balise :
renvoie le code php :
<?php echo context::global_filter($_ctx->posts->cat_url,0,0,0,0,0,'EntryCategoryShortURL'); ?>
Quel est donc la solution pour utiliser une informations disponible sous forme de balise templates mais de manière "imbriqué" dans une autre balise templates ?
Cela fait un moment que je cherche sur l'ensemble de la doc., sur le forum DC2, et sur dotaddict et je ne trouve pas ...
Merci d'avance pour votre coup de pouce.
Pierre
On se heurte ici à une limitation du moteur de template de Dotclear. Une balise ne peut être imbriquée dans une autre balise, en tout cas sous cette forme.
Ceci dit je vois mal ce que vous cherchez à obtenir dans votre exemple, pourriez-vous être plus explicite sur le résultat recherché ?
Bonsoir Franck et merci pour cette réponse si rapide.
Je cherche à faire un bloc permettant d'afficher les derniers billets de la catégorie du billet qu'on affiche dans mon template "post.html".
J'ai donc fait :
Mais ce code me donne une erreur dans l'un de mes fichiers de cache, en regardant l'erreur j'ai vu que ça ne pouvais pas marcher.
Donc il n'existe aucun moyen d'avoir cette "variable" sous une autre forme ? Quitte à intégrer du PHP directement dans mon TPL cela ne me fait pas peur, je souhaite juste que ça marche.
Merci pour le coup de main,
Pierre
Bonsoir,
pour faire ça, le plus simple est, je pense, d’utiliser le plugin billets connexes, je pense. Attention, il existait un bug, dont j’ignore s’il persiste dans la dernière version, dont la correction peut être trouvée sur le forum Dotclear ;-)
Bonjour, je cherche à utiliser les fonctions native de DC2 car le plugin billets-connexes avait un bug et puis si j'utilise un plug-in externe cela veut dire qu'il faut le maintenir à jour, alors que si je me base sur le fonctionnement de DC2 et de son moteur de template c'est plus simple à maintenir.
Pierre
Bonjour,
De quel bug parlez-vous ? Vous pouvez me donner le lien vers le sujet du forum ?