Un billet à la Une

J’avais besoin, pour mettre en valeur le dernier billet publié ici de différencier à l’aide des balises template de Dotclear, sur la page d’accueil, le premier billet de la boucle. Bien évidemment j’ai aussitôt pensé à la balise <tpl:LoopPosition> qui permet de différencier le traitement en fonction de l’état actuel de parcours de la boucle — c’est à dire si le billet en cours de traitement est le premier, le deuxième, …, ou le dernier — et tout aussi naturellement j’ai voulu utiliser le jeu de balises <tpl:Pagination> et <tpl:PaginationIf> pour déterminer si il s’agit de la première page ou d’une autre.

J’ai alors codé quelque chose comme ceci dans le fichier home.html :

<tpl:Entries>
 <tpl:LoopPosition start="1" length="1">
  <!-- # Traitement du premier billet -->
  <tpl:Pagination>
   <tpl:PaginationIf start="1">
    <!-- # Première page -->
    <!-- # Affichage de l'extrait s'il existe suivi du contenu --> 
   </tpl:PaginationIf>
   <tpl:PaginationIf start="0">
    <!-- # Page 2 et suivante (pas la première page) -->
    <!-- # Affichage de 200 premiers caractères de l'extrait ou du contenu si pas d'extrait --> 
   </tpl:PaginationIf>
  </tpl:Pagination>
 </tpl:LoopPosition>
 <tpl:LoopPosition start="2">
  <!-- # Traitement des autres billets -->
  <!-- # Affichage de 200 premiers caractères de l'extrait ou du contenu si pas d'extrait --> 
 </tpl:LoopPosition>
</tpl:Entries>

C’est fonctionnel, ça répond à mon “cahier des charges”, mais il n’est pas sans défaut, car la balise <tpl:Pagination> ne sera active que s’il y a au moins deux pages à afficher, ce qui peut ne pas être le cas dans certains contextes (cas d’un blog tout jeune par exemple). Il faudrait pour cela ajouter l’attribut no_context="1" à la balise pour être certain qu’il fonctionne. Ceci dit il y a plus simple à écrire, pourvu qu’on connaisse un peu le jeu de balise à notre disposition. Voilà le code final que j’utilise, qui a l’avantage de fonctionner quelque soit le nombre de pages final :

<tpl:Entries>
 <tpl:EntryIf first="1">
  <!-- # Traitement du premier billet -->
  <tpl:SysIf current_mode="default">
   <!-- # Première page -->
   <!-- # Affichage de l'extrait s'il existe suivi du contenu --> 
  </tpl:SysIf>
  <tpl:SysIf current_mode="!default">
   <!-- # Page 2 et suivante (pas la première page) -->
   <!-- # Affichage de 200 premiers caractères de l'extrait ou du contenu si pas d'extrait --> 
  </tpl:SysIf>
 </tpl:EntryIf>
 <tpl:EntryIf first="0">
  <!-- # Traitement des autres billets -->
  <!-- # Affichage de 200 premiers caractères de l'extrait ou du contenu si pas d'extrait --> 
 </tpl:EntryIf>
</tpl:Entries>

La balise <tpl:SysIf current_mode="default"> permet de tester si l’on est sur la première page de la page d’accueil où seul ce mode default est positionné. En effet sur les pages suivantes, c’est le mode default-page qui est alors positionné.

Conclusion il ne faut pas hésiter à fouiller un peu la documentation disponible sur les balises et leurs usages avant de s’attaquer à la résolution d’un problème ;-)

Ajouter un commentaire

Les commentaires peuvent être formatés en utilisant une syntaxe wiki simplifiée.

Ajouter un rétrolien

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

Haut de page