Pagination

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

Affiche X liens vers des articles, par page, dans une rubrique et place les liens adéquats (X articles précédents, liens vers 10 pages/rubriques maxi à compter de celle où on se trouve, X articles suivants). Utilise du PHP dans la boucle.

Principe

Si, dans le squelette rubrique.html, on a mis une BOUCLE(ARTICLES) avec le paramêtre {tout}, les pages rubriques vont grandir au fur et à mesure du remplissage du site. Si on a limité le nombre d’articles (avec le paramètre {0, 20}, par exemple), on « perd » les plus anciens.

L’avantage de cette boucle, est qu’on n’est plus obligé de limiter le nombre de liens vers les articles dans une page rubrique, tout en évitant de voir grandir cette page à l’infini. C’est ce qu’on appelle la pagination.

Exemple

Ici avec une syndication, mais c’est le même principe qu’avec les articles : http://wb.attac.be/rubrique.php3?id_rubrique=48

Télécharger le code

Pagination : version III, sept 2003 à télécharger ici

Adresse de publication originale :
http://support.cassiopea.org/spip/spip-tech.shtml#nb_article_rub

Pour ceux qui veulent en savoir plus :

Codes de la contribution

  1. le code + la boucle à copier / coller dans la page rubrique.
  2. le fichier article-pagine.inc à télécharger dans le répertoire racine de votre site spip (là où il y a les squelettes .php3).

N’oubliez pas de télécharger aussi fleche-gauche.gif et fleche-droite.gif dans /NAVPICS.

A propos des squelette inclus :
Si vous mettez la boucle dans un squelette inclus, il est nécessaire mais apparament pas suffisant d’appeler le squelette inclus avec . Il faut en plus, ré-imbriquer la boucle dans une boucle rubriques et dans le squelette inclus lui-même. On ne sait pas pourquoi, mais on sait que sinon ca ne marche pas bien. Celui qui trouve va passer pour un fortiche ;-). En bref pour les squelettes inclus, ca donne ceci :

<BOUCLE_rubrique(RUBRIQUES){id_rubrique}>
	Le code et la boucle ci-dessous ...
</BOUCLE_rubrique>

1) le code + la boucle à copier / coller dans la page rubrique

<!-- Compte et affiche le nombre total d'articles de la rubrique -->
<B_compte_articles>
 <BOUCLE_compte_articles(ARTICLES){id_rubrique}>
 <?php $total=#TOTAL_BOUCLE; ?>
 </BOUCLE_compte_articles>
Nombre total d'articles: #TOTAL_BOUCLE
</B_compte_articles>

<!-- Initialisation du compteur et du nombre d'articles par page (php) -->
<?php
//Nombre d'articles par page: Ici, 15 article par page. Vous pouvez bien sur mettre un autre nombre que 15..
//Attention, il doit être égal au nombre du critère {debut_article,15}
$nb_art_par_page=15; 
if (isset($debut_article)) {$compteur=$debut_article;} else {$compteur=0;} 
?>

<B_articles>
 <b>Articles</b><br><br>
 <ul>
<!-- Attention: Le nombre 15 dans {debut_article,15} doit être égal à $nb_art_par_page=15; ci-dessus -->
<BOUCLE_articles(ARTICLES){id_rubrique}{par date}{inverse}{debut_article,15}>
  <li><a href="#URL_ARTICLE">[(#TITRE)]</a></li> 

<!-- Incrémentation du compteur (php) -->
<?php if ($compteur<0) {$compteur=0;} else {$compteur+=1;} ?>

 </BOUCLE_articles>
 </ul>

<!-- Lien vers page précédente et suivante (php) -->
<div style="text-align:left">
<?php
// Param: $idtype = #ID_RUBRIQUE|#ID_MOT|... , $type = "rubrique"|"mot"|...
$idtype=#ID_RUBRIQUE; $type = "rubrique";
include "article-pagine.inc";
?>
</div>

</B_articles>
 <br>Il n'y a pas d'articles dans cette rubrique.
<//B_articles>

2)le code contenu dans "article-pagine.inc

 
<?php

// Auteur: robert.sebille(at)cassiopea.org - sept 2003 
// Sous licence GNU/GPL http://www.gnu.org/copyleft/gpl.html 
// Retourne les liens XX articles suivants / précédents


// Gestion des n° de pages
$mod0 = $total % $nb_art_par_page;
if ($mod0 == 0) 
  {$total_page = floor($total / $nb_art_par_page);}
else
  {$total_page = floor($total / $nb_art_par_page) + 1;}

$page = floor($compteur / $nb_art_par_page);
$page_inv = $total_page - $page + 1;

if ($mod0 !=0 && ($total - $compteur) < $mod0) 
  {$page = $total_page; $page_inv = 1; $offset_art_prec = $total - $mod0 - $nb_art_par_page;}
else 
  {$offset_art_prec = $compteur - (2 * $nb_art_par_page);}


// Gestion de l'affichage des liens
// fleche gauche
if ($total_page > 1) {
	$affiche = ""; $pageplus_inv = $page_inv + 1; $pagemoins_inv = $page_inv - 1;
  if ($offset_art_prec >= 0) 
	{$affiche .= "<a href='$type.php3?id_$type=$idtype&debut_article=$offset_art_prec' title='Les ".$nb_art_par_page." articles suivants'><img src='NAVPICS/fleche-gauche.gif' width='15' height='9' alt='Vers la page ".$pageplus_inv." et les ".$nb_art_par_page." articles suivants' border='0'></a>&nbsp;&nbsp;";} 

// Milieu
	$affiche .= "Page(s):";

	$MaxPageLinks = 10;
	if ($total_page - ($MaxPageLinks - 1)  > $page_inv) 
		{$PageStart = $page_inv + ($MaxPageLinks - 1);} else {$PageStart = $total_page;}
	if ($PageStart - ($MaxPageLinks -1) < 1) 
		{$PageEnd = 1;} else {$PageEnd = $PageStart - ($MaxPageLinks - 1);}

	for ($i = $PageStart; $i >= $PageEnd; $i--) {
		$offset_inv = ($nb_art_par_page * $total_page) - ($i * $nb_art_par_page);
		if ($i != $page_inv)
			{$affiche .= "&nbsp;<a href='$type.php3?id_$type=$idtype&debut_article=$offset_inv'>&nbsp;$i&nbsp;</a>";}
		else
			{$affiche .= "&nbsp;|&nbsp;$i&nbsp;|";}
	}	// End ($i = $PageStart; $i >= $PageEnd; $i--)

// fleche droite
	if ($compteur < $total) 
		{if (($compteur+$nb_art_par_page) > $total) {$nb_art_suiv = $total - $compteur;} else {$nb_art_suiv = $nb_art_par_page;}
		$affiche .= "&nbsp;<a href='$type.php3?id_$type=$idtype&debut_article=$compteur' title='Les ".$nb_art_suiv." articles précédents'><img src='NAVPICS/fleche-droite.gif' width='15' height='9' alt='Vers la page ".$pagemoins_inv." et les ".$nb_art_suiv." articles précédents' border='0'></a>";} 

// Dessous
	$affiche .= "<br>Nombre total de page(s): $total_page";

} // End if ($total_page > 1)

echo $affiche;

?>

Remarque de mise à jour

Changements dans la version III
-  L’appel de fonction qui provoquait la Fatal error : Call to undefined function : getarticlelinks() sur certains sites a été supprimé et remplacé par un fichier inclus (article-pagine.inc) qui contient le code (qui n’est donc plus dans mes_fonctions.php3)
-  Une correction a été apportée au code qui obligeait à ce que la page traitée soit une page rubrique. Ce peut-être maintenant n’importe quelle boucle qui supporte le critère Spip {debut_xxx,b} (relire cette doc sur spip.net ), une boucle mot, par exemple, ou encore une boucle SYNDIC_ARTICLES, comme sur cette page, etc. Il faut bien sur alors adapter les boucles spip au cas choisi

Pour ceux qui avaient implémenté la version II et qui souhaitent passer à la version III

1) Uploader le fichier « article-pagine.inc » dans le répertoire racine de votre site spip (là où il y a les squelettes .php3).

2) Dans le code du squelette .html à paginer, remplacer

les anciennes lignes :

// Param: compteur, nb_art_par_page, total, #ID_RUBRIQUE||#ID_MOT, "rubrique"||"mot"
echo getArticleLinks($compteur, $nb_art_par_page, $total, #ID_RUBRIQUE, "rubrique");

par ces nouvelles :

// Param: $idtype = #ID_RUBRIQUE|#ID_MOT, $type = "rubrique"|"mot"
$idtype=#ID_RUBRIQUE; $type = "rubrique";
include "article-pagine.inc";

3) Supprimer le code de la fonction « getArticleLinks(.. » de votre fichier mes_fonctions.php3. (ce dernier point n’est pas obligatoire, mais inutile de charger du code devenu inutile).

Discussion

Aucune discussion

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