La mise en oeuvre du plugin, avec une navigation par défaut et un thème relativement standard, est triviale.
Comme indiqué sur la page de configuration du plugin Pagination, il suffit d'ajouter dans le fichier list.php, avant et/ou apèrs la boucle while(...)
, la ligne suivante :
<?php if ($mode == 'pagination') dcPagination::showNavigation(); ?>
Après cet ajout, votre fichier list.php devrait ressemble à quelque chose d'approchant :
<?php if ($mode == 'pagination') dcPagination::showNavigation(); ?> <!-- Boucle sur la liste de billets --> <?php while ($news->fetch()) : ?> <div class="post"> <?php dcDayDate('<p class="day-date">%s</p>'); ?> (...) </div> <?php endwhile; ?> <?php if ($mode == 'pagination') dcPagination::showNavigation(); ?>
Vous obtiendrez alors ce résultat :
Mais il faut reconnaitre que la navigation présentée n'est pas très "sexy", et l'on peut parier que de nombreux utilisateurs souhaiteront lui donner une apparence plus personnelle.
Evidemment, le plugin met à votre disposition des fonctions pour les gabarits.
Ces dernières vont vous permettre d'affiner facilement la présentation de cette navigation multipage.
Il s'agit de la fonction d'affichage de cette fameuse navigation.
Appelée sans arguments, comme c'est le cas par défaut, vous obtenez la barre illustrée plus haut.
Cette fonction accepte les arguments suivants :
Paramètre | Description |
---|---|
$bloc | Une chaine de formatage représentant le bloc XHTML englobant la navigation. Par défaut, ce paramètre contient '<p>%s</p>' |
$current | Une chaine de formatage représentant le bloc XHTML englobant le numéro de la page courant. Par défaut, ce paramètre contient '<strong>%s</strong>' |
$page_link | Une chaine de formatage représentant le bloc XHTML englobant les liens vers les autres pages '<a href="%s">%s</a>' |
$prev_link | Une chaine de formatage représentant le bloc XHTML englobant le lien vers la page précédente '<a href="%s"><</a>' |
$next_link | Une chaine de formatage représentant le bloc XHTML englobant le lien vers la page suivante '<a href="%s">></a>' |
Fonction alternative d'affichage de la navigation.
Cette version présente une liste condensée de liens, idéale avec une liste de billets longue comme la muraille de Chine (et plus si affinités... ).
Cette fonction accepte les arguments suivants :
Paramètre | Description |
---|---|
$prev | Chaine pour le nom du lien page précédente 'Page précédente' |
$current | Chaine de formatage pour les informations de page courante 'Page %1$d sur %2$d' |
$next | Chaine pour le nom du lien page suivante 'Page suivante' |
$bloc | Chaine de formatage du bloc XHTML englobant. Par défaut, ce paramètre contient '<p class="pagenav">%s</p>' |
$sep | Chaine de séparation entre les éléments de navigation ' - ' |
Elle permet l'affichage des informations relatives à la position et l'état actuel de la pagination.
Paramètre | Description |
---|---|
$s | Une chaine de formatage de la sortie. Par défaut, ce paramètre contient '%1$d %2$d' Les informations disponibles sont :
|
Commençons par une petite modification du fichier list.php :
<?php if ($mode == 'pagination') dcPagination::showNavigation('<p class="pagenav">%s</p>'); ?> <!-- Boucle sur la liste de billets --> <?php while ($news->fetch()) : ?> (...) <?php endwhile; ?> <?php if ($mode == 'pagination') dcPagination::showNavigation('<p class="pagenav">%s</p>'); ?>
Parallèlement, modifions la feuille de styles du thème et rajoutons les styles suivants :
.pagenav { font: 0.9em; } p.pagenav a { background : #ddd; color: black; padding:2px; border: 1px solid #bbb; text-decoration: none; font-size:90%; } p.pagenav a:hover { background:#598F9A; color:white; } p.pagenav strong { color: black; padding:2px; border: 1px solid #bbb; }
Nous obtiendrons alors une navigation visuellement plus acceptable :
C'est tout de même plus joli, non ? ...
Pour les blogueurs prolixes, la liste de pages peut devenir rapidement encombrante et inesthétique. C'est alors l'occasion d'utiliser la méthode dcPagination::showCleanNavigation
.
Une fois encore, nous effectuerons une modification du fichier list.php :
<?php if ($mode == 'pagination') dcPagination::showCleanNavigation(); ?> <!-- Boucle sur la liste de billets --> <?php while ($news->fetch()) : ?> (...) <?php endwhile; ?> <?php if ($mode == 'pagination') dcPagination::showCleanNavigation(); ?>
Appelé avec les paramètres par défaut et sans style spécifique, cette méthode produira un affichage tel que montré ci-après :
Vous trouvez cela encore trop important ? Condensons, condensons.
Par exemple, remplaçons les textes "Page précédente" et "Page suivante" par "<<" et ">>" respectivement. Au passage, enlevons également les informations de pagination "Page n sur m".
Notre fichier list.php ressemblera cette fois à ceci :
<?php if ($mode == 'pagination') dcPagination::showCleanNavigation('<<','','>>'); ?> <!-- Boucle sur la liste de billets --> <?php while ($news->fetch()) : ?> (...) <?php endwhile; ?> <?php if ($mode == 'pagination') dcPagination::showCleanNavigation('<<','','>>'); ?>
Nous obtiendrons alors ce type de navigation page à page :
Evidemment, la navigation courte peut, au même titre que la navigation complète, voir son apparence améliorée via un recours aux CSS. A vous de jouer !
Pour fonctionner, le plugin de Pagination intercepte les modes standards de DotClear. Aussi, lors de l'interception d'un mode, la variable DotClear $mode
forcée avec la valeur "pagination".
Vous utilisez peut être un template personnalisé qui ne présente pas les listes de la même manière pour les archives et les rubriques. Dans un tel cas de figure, les probabilités sont élevées que vous utilisiez des tests sur la variable $mode
, avec un code ressemblant plus ou moins à :
<?php if ($mode == 'cat') : ?> <?php include(dirname(__FILE__).'/list_categories.php'); ?> <?php elseif ($mode == 'month') : ?> <?php include(dirname(__FILE__).'/list_archives.php'); ?> <?php endif; ?>
Si vous avez configuré le plugin Pagination pour intercepter ces 2 modes, vos tests ne fonctionneront plus et des listes par défaut seront probablement affichées en lieu et place de vos listes spécifiques.
Pour gérer ce type de situations, le plugin met à votre disposition une nouvelle variable globale dc_orig_mode
contenant le nom du mode intercepté. Vous pouvez alors ajouter à votre template le code suivant :
<?php if ($mode == 'pagination') { if ($dc_orig_mode == 'cat') { include(dirname(__FILE__).'/list_categories.php'); } elseif ($dc_orig_mode == 'month') { include(dirname(__FILE__).'/list_archives.php'); } } ?>
Vous retrouverez ainsi le comportement désiré, même lorsque la pagination est activée.