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">« {{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}} »</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 couranteoffset="+1"
-> ajoute 1 au numéro de la page actuellement affichéeoffset="-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
Où 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"> « page {{tpl:PaginationCounter}}</a> <a href="{{tpl:PaginationURL offset="+1"}}" class="prev">< {{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}} </a> - <a href="{{tpl:BlogURL}}page/1" class="prem">page 1 » </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.
Commentaires
Bonjour :-)
Adopté ! ca marche super !
par contre, je préfère placer les "-" et les ">" "<" autrement par rapport à ton code ce qui donne sur mon dc2 :
:-)
Euh... je n'ai pas compris la différence entre la présentation que tu indiques et la mienne ?
J'ai un petit souci avec cette pagination que je ne veux afficher que dans ma page catégorie
« page 62 < billets précédents - page 61 de 62 - billets suivants > page 1 »
avec votre méthode j'ai pour la page 62 et la page 1 :
urldublog/page/1 ce qui correspond à
page/ce qui est normal au vu du code source
mais pour billets précedents et suivants :
urldublog/category/souscategory/etc/page/2 qui correspond à
ouDonc quand je clique sur page 1 ou page 62, je me retrouve sur la pagination générale au lieu d'être sur la pagination de ma catégorie :S
moi ce que j'aimerai c'est avoir pour la page 62 et la page 1 un code pour afficher:
urldublog/category/souscategory/etc/page/1 et urldublog/category/souscategory/etc/page/62
J'ai essayé de faire
ou mais ça résoudra pas le problème quand j'aurai plus de page...Merci pour votre aide :D
Bon j'ai trouvé lol
Pour
<a href=" page/ " class="der"> « page </a>
J'ai remplacé
par
ce qui donne
<a href=" /page/ " class="der"> « page </a>