DotClear 2 et les templates (6)

Je continue la suite du petit exercice commencé dans ce billet. Pour rappel voilà son énoncé :

J'ai prévu d'afficher un bloc particulier sur la page d'accueil. Ce bloc contiendra le dernier billet publié d'une catégorie précise ou à défaut, un texte fixe. Cette catégorie s'appellera Flash et ne servira qu'à gérer ce genre de petits messages et par conséquent ses billets ne devront pas apparaitre dans le flux normal.

Nous avons vu comment exclure une catégorie du flux normal des billets, la catégorie Flash. Voyons maintenant comment traiter le bloc qui doit être affiché sur la première page. J'ai choisi de mettre tout ce qui sera utilisé pour ce bloc dans un fichier particulier, nommé _intro.html, et qui est inclus juste après la balise <div id="wrapper"> du fichier home.html[1]. Voilà la portion de code du fichier home.html (j'ai mis l'emphase sur ce que j'ai rajouté) :

<div id="wrapper">

<!-- # Franck Paul : ajout du bloc d'intro -->
{{tpl:include src="_intro.html"}}

Ce sera la dernière modification du fichier home.html, et vous aurez certainement remarqué au passage le signe # utilisé dans le commentaire pour qu'il ne soit pas inclus dans le code HTML généré par DotClear 2.

Voyons maintenant le contenu du fichier _intro.html. Première chose à faire, encadrer tout le bloc dans une balise <div> afin de pouvoir lui appliquer des styles particuliers :

<div id="introcontent">
…
(contenu du bloc)
…
</div>

Passons maintenant au contenu du bloc. Celui-ci, billet ou texte fixe, doit être affiché uniquement sur la première page. Pour le déterminer, il faut utiliser le code suivant :

<tpl:Entries category="!Flash" no_content="1">
   <tpl:Pagination>
      <tpl:PaginationIf start="1">
      …
      (affichage du dernier billet Flash ou d'un texte fixe)
      …
      </tpl:PaginationIf>
   </tpl:Pagination>
</tpl:Entries>

Normalement vous devez avoir reconnu la première ligne, <tpl:Entries category="!Flash" no_content="1">, qui permet de retrouver la liste des billets ne faisant pas partie de la catégorie Flash. On utilise l'attribut no_content="1" car nous n'avons pas besoin du contenu des billets. Vous reconnaitrez sans difficulté la balise qui ferme le bloc à la fin : </tpl:Entries>.

À l'intérieur de ce bloc, qui définit une sorte de contexte où nous avons à notre disposition la liste des billets, nous pouvons utiliser un bloc spécifique à la pagination, <tpl:Pagination> et </tpl:Pagination>, qui permettra ensuite de tester la page courante à l'aide, encore une fois d'un bloc de test, <tpl:PaginationIf start="1"> et </tpl:PaginationIf>. L'attribut start="1" permet de tester si on est sur la première page[2].

Pour résumer, on définit le contexte servant à déterminer le nombre de page (nombre de billets retrouvés divisé par le nombre de billets par page précisé dans les préférences du blog) et on vérifie que la page courante est la première.

Une fois ce test effectué, nous allons récupérer, s'il existe, le dernier billet publié de la catégorie Flash. Le bloc nécessaire pour obtenir celui-ci est le suivant :

<tpl:Entries category="Flash" lastn="1">
…
</tpl:Entries>

Ici on ne retient que la catégorie Flash (attribut category="Flash") et uniquement le dernier publié (attribut lastn="1"[3]).

Intégrons maintenant ce code dans le code précédent (test de la première page). Cela donne cela :

<tpl:Entries category="!Flash" no_content="1">
   <tpl:Pagination>
      <tpl:PaginationIf start="1">
         <tpl:Entries category="Flash" lastn="1"></tpl:Entries>
      </tpl:PaginationIf>
   </tpl:Pagination>
</tpl:Entries>

Allo ? Houston ? On a un problème !

En effet il s'avère qu'on ne peut imbriquer des blocs template de même nature[4] (<tpl:Entries> en ce qui nous concerne) ! Comment contourner ce soucis ? Et bien en développant nos propres balises (ou fonctions) template qui serviront à stocker le résultat des tests que nous effectuons (première page, présence d'au moins un billet publié dans la catégorie Flash).

Rendez-vous au prochain billet pour la suite des templateurs fous \o/

Notes

[1] Je rappelle que ce bloc ne doit être affiché que sur la page d'accueil. On pourra si nécessaire ré-utiliser ce fichier _intro.html dans d'autres contextes si nécessaire.

[2] On peut également savoir si on est sur une autre page que la première en utilisant l'attribut start="0". De même, on peut utiliser l'attribut end="1" pour déterminer si l'on est sur la dernière page, ou end="0" pour les autres pages.

[3] Si vous voulez les trois derniers billets, il vous suffit d'utiliser l'attribut lastn="3".

[4] J'en avais détaillé la raison dans ce billet.

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/3112

Haut de page