Attention : on ne peut réaliser ceci avec les fonctions template disponibles que pour les pages home. Pour les autres pages il faudrait créer une fonction qui permette de récupérer l'équivalent de PaginationURL sans le numéro de la page en cours. C'est très faisable mais nous restons ici dans le cadre des fonctions standards disponibles.

Pour les besoins d'un blog particulier dont les billets sont présentés dans l'ordre chronologique (le plus ancien en premier donc...) ou pour toute autre raison, il peut être utile d'ajouter aux mentions « billets précédents - page x de y - billets suivants » un lien vers la première et la dernière page.

J'aimerais vous faire croire qu'il m'a fallu tuer dix bœufs et 1000 lignes de code à mains nues pour parvenir à ce résultat et accueillir modestement vos acclamations, mais en fait c'est d'une simplicité biblique.

L'existant

Examinons d'abord le code, on en profitera pour mieux l'apprivoiser :

<tpl:EntriesFooter>
      <tpl:Pagination>
        <p class="pagination"><tpl:PaginationIf end="0"><a href="{{tpl:PaginationURL offset="+1"}}" class="prev">&#171;
        {{tpl:lang previous entries}}</a> - </tpl:PaginationIf>
        {{tpl:lang page}} {{tpl:PaginationCurrent}} {{tpl:lang of}} {{tpl:PaginationCounter}}
        <tpl:PaginationIf start="0"> - <a href="{{tpl:PaginationURL offset="-1"}}" class="next">{{tpl:lang next entries}}
        &#187;</a></tpl:PaginationIf></p>
      </tpl:Pagination>
    </tpl:EntriesFooter>

On décortique.

D'abord les éléments :

  • <tpl:EntriesFooter> : pour se placer après le dernier billet, mais toujours dans la boucle.
  • <tpl:Pagination> : pour indiquer qu'on va travailler dans le contexte de la pagination et des fonctions qui lui sont associées.
  • <tpl:PaginationIf end="0"> : dans le cas où on n'est pas sur la dernière page
  • </tpl:PaginationIf>: fin de cette condition
  • - [blabla affichage de la page courante] -
  • <tpl:PaginationIf start="0"> : dans le cas où on n'est pas sur la première page
  • </tpl:PaginationIf> : fin de cette condition
  • </tpl:Pagination> : on en a fini avec le contexte de la pagination
  • </tpl:EntriesFooter> fin de la partie située après le dernier billet

Et pour remplir ces éléments, quelques fonctions toutes prêtes dans notre lego :

  • {{tpl:PaginationURL offset="+1"}} et {{tpl:PaginationURL offset="-1"}} :
    • PaginationURL -> URL de la page courante
    • offset="+1" -> ajoute 1 au numéro de la page actuellement affichée
    • offset="-1" -> enlève 1 au numéro de la page actuellement affichée
  • {{tpl:PaginationCounter}} -> nombre de pages total
  • {{tpl:lang previous entries}} -> billets précédents dans l'idiome du blog
  • {{tpl:lang next entries}} -> billets suivants dans l'idiome du blog
  • {{tpl:PaginationCurrent}} -> affiche le numéro de la page actuellement affichée
  • {{tpl:lang of}} -> de dans l'idiome du blog

On construit

De quoi avons-nous besoin ? De construire deux URL de la forme :

  • http://urlversmonblogue/page/1
  • http://urlversmonblogue/page/y

y est le numéro de la dernière page. Et celui-là on l'a dans notre légo juste au dessus, c'est {{tpl:PaginationCounter}} Quant à http://urlversmonblog/ on l'obtient facilement avec {{tpl:BlogURL}}

Voici donc nos deux cibles de lien :

  • {{tpl:PaginationURL}}page/1 : pour la première page[1]
  • {{tpl:BlogURL}}page/{{tpl:PaginationCounter}} pour la dernière

Il ne reste plus qu'à mettre un texte qui nous convient pour nommer ces liens, et insérer tout ça dans l'existant, ajouter des class pour pouvoir faire de la déco si besoin et c'est parti !

<tpl:EntriesFooter>
      <tpl:Pagination>
        <p class="pagination">
        <tpl:PaginationIf end="0">
           <a href="{{tpl:BlogURL}}page/{{tpl:PaginationCounter}}" class="der"> &#171; page {{tpl:PaginationCounter}}</a>
           <a href="{{tpl:PaginationURL offset="+1"}}" class="prev">&lt; {{tpl:lang previous entries}}</a> 
        </tpl:PaginationIf>
        - {{tpl:lang page}} {{tpl:PaginationCurrent}} {{tpl:lang of}} {{tpl:PaginationCounter}} -
        <tpl:PaginationIf start="0">
           <a href="{{tpl:PaginationURL offset="-1"}}" class="next"> &gt; {{tpl:lang next entries}} </a>
           - <a href="{{tpl:BlogURL}}page/1" class="prem">page 1 &#187; </a>
      </tpl:PaginationIf>
      </p>
      </tpl:Pagination>
    </tpl:EntriesFooter>

Vous devriez avoir maintenant quelque chose qui ressemble à :

« page 45 < billets précédents - page 3 de 45 - billets suivants > page 1 »

Notes

[1] En réalité, puisqu'il s'agit de la page 1, un simple retour à l'accueil suffirait avec {{tpl:BlogURL}}@@ hein, c'est juste pour la méthodologie que je l'affiche ainsi dans ce tuto.