Pagination sous forme de select avec boutons précédent et suivant

Le but ici est de fournir du code facilement insérable dans n’importe quelle squelette article pour gérer la pagination quelque soit le critère de tri.

Inutile d’insister sur l’importance des systèmes de pagination. Il en existe d’excellents dans SPIP, voir par exemple l’article « Pagination ».

Dans certains cas, il peut être utile de parcourir le contenu d’une rubrique page par page. De plus, l’ordre choisi peut se faire avec divers critères :
-  Numérotation de type 1. Titre
-  Ordre imposé par un numéro inscrit dans un champs, par exemple sous-titre.

Le but donc ici est de fournir du code facilement insérable dans n’importe quelle squelette article.

Explications sur le squelette proposé

Construction du tableau des id_article à partir d’une boucle qui liste les articles de la même rubrique.
Le critère de classement est ici le numéro placé dans le sous-titre. Il suffit de le remplacer par le critère de votre choix. Il est indispensable de déclarer dans une variable php la valeur de #ID_ARTICLE juste après la boucle englobante de la page article :

$i=0;
<BOUCLE_tab_rub(ARTICLES){id_rubrique}{par num soustitre}>
$tabid[$i]='#ID_ARTICLE';
$i++;
</BOUCLE_tab_rub>
while (list($key, $value)=each($tabid)) {
	if($idencours==$tabid[$key])
	{
	$rank=$key;
	}
}

La boucle while permet de repérer l’id_article actuellement affiché et de sélectionner son index pour la suite.

Le deuxième bout de code concerne l’affichage du sélecteur à l’emplacement souhaité dans la page.

J’ai choisi la présentation en tableau pour le bon affichage des flèches.

	<!-- ici le selecteur des pages du chapitre -->
	<table width="100%"  border="0" cellspacing="0" cellpadding="5">
		  <tr>
		  <B_pagine>
			<td width="35%" align="right" valign="top">
					<?php
					if ($rank > 0) {
					$rank_l=$rank-1;
					echo '<a href="'.$url.'?id_article='.$tabid[$rank_l].'"><<</a>';
						}
					?>
			</td>
			<td width="30%" height="12" align="center">
					<form name="choix">
					<select name="subject" onChange="javascript:Reselect();">
						<option selected>page <? echo ($rank+1); ?></option>
						<?php $key=0; 
						<BOUCLE_pagine(ARTICLES){id_rubrique}{par num soustitre}> 
						echo '<option value="'.$url.'?id_article='.$tabid[$key].'">page '.($key+1).'</option>';
						$key++;
						</BOUCLE_pagine>
						?>
					</select>
					</form>
			</td>
			<td height="12" align="left" valign="top">
					<?php
					$list_max=count($tabid);
					//echo $list_max;
					if ($rank < ($list_max-1)) {
					$rank_h=$rank+1;
					echo '<a href="'.$url.'?id_article='.$tabid[$rank_h].'">>></a>';
						}
					?>
			</td>
				</B_pagine>
		  </tr>
		</table>

Évidemment, pour la redirection du select j’utilise un petit javascript qui correspond aux noms du formulaire et du select, à copier dans l’en-tête :

function Reselect(){
idoption = document.choix.subject.value;
this.location.href = idoption;
}

Installation et Personnalisation

Le squelette est totalement générique. Ceci signifie qu’il s’insère dans tout squelette de type article, quel que soit son nom. Ceci est obtenu en appliquant une regexp sur la balise #SELF.
Vous n’avez qu’à recopier le couple select_generic.php3/ select_generic.html à la racine de votre site (ou dans votre dossier squelettes), puis utiliser la syntaxe : <INCLURE(select_generic.php3){id_article}> à l’emplacement voulu d’un squelette article.
Le squelette utilise le critère {par num soustitre} pour fabriquer les liens de pagination, vous pouvez changer simplement ce critère dans la boucle au début du fichier select_generic.html s’il ne vous convient pas (et mettre par exemple {par titre}).

Il ne vous reste plus qu’à changer éventuellement les images correspondant par exemple à des flèches comme celles de l’img_pack.

Vous pouvez voir le fonctionnement ici

Discussion

2 discussions

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom