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
- le code + la boucle à copier / coller dans la page rubrique.
- 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
<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> ";}
// 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 .= " <a href='$type.php3?id_$type=$idtype&debut_article=$offset_inv'> $i </a>";}
else
{$affiche .= " | $i |";}
} // 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 .= " <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).
Discussions par date d’activité
12 discussions
bonjour,
j’ai fait exactement comme vous expliquez mais ça marche pas du tout, ça n’a rien changé !!! pourriez vous m’aider le plus vite possible SVP ?
merci
Répondre à ce message
Bonjour ! D’abord, merci de coder des trucs comme ça, vraiment nécéssaires (j’en ai besoin depuis le début !) d’une part, et d’assurer ainsi le support, d’autre part !
Ce que je cherche à faire, c’est d’utiliser ce hack sur ma page de sommaire, où j’affiche la liste de TOUTES les breves de TOUTES les rubriques (genre blog) un peu comme si c’était une rubrique, mais qui contient tout.
De fait, juste en remplaçant ARTICLE par BREVE, le script me trouve le nombre de breves, mais j’ai du mal à comprendre comment je peux lui dire de ne pas s’occuper des rubriques ?
J’espere que je suis clair...? Ce qui est sur, c’est que je cherche à faire ça depuis longtemps ! Donc, je triche, et j’en suis à quatre & ;quot ;fausses& ;quot ; pages de sommaire, qui me servent juste à incrémenter la boucle
& ;lt ;BOUCLE_breves(BREVES) par date inverse 0,24& ;gt ; avec un lien vers la page suivante, qui elle, contient
& ;lt ;BOUCLE_breves(BREVES) par date inverse 24,48& ;gt ;
Et ainsi de suite, et je n’aime pas devoir dupliquer comme ça du code :/
Merci de votre aide !
- phil
Répondre à ce message
Bonjour
Tout d’abord merci pour cette contrib très pratique !
Petite question : comment faire pour inverser les chiffres présents après « Pages : » ? En fait actuellement j’ai « Pages : 3 | 2 | 1 » où le 3 correspond à mes articles les plus récents, et je voudrais que ceux-ci soient désignés par un 1, ce qui me semble plus logique...
Merci pour vos avis !
Répondre à ce message
merci beaucoup, le script fonctionne tres bien... sauf sur le moteur de recherche car on l’appelle de la facon suivante recherche.php ?recherche=brest et non en recherche.php ?id_recherche=brest
voici ma solution au début du script
et ensuite remplacer ds le code id_$type par $type2
Répondre à ce message
Salut de l’Espagne et pardon pour mon française
¿Il y a des personnes avec pagination dans INCLURE et ça marche ?
J’ai de la pagination dans un squelette inclus et avec le boucle ROUBRIQUES dans les deux squelettes, mais ça ne marche pas : on affiché le premiére page tout le temp n’import quelle page je demande, et si je recalcul une page on affiché cette tout le temp. En breve : on affiché tout le temp le derniére page recalculé.
Dans rubrique.html
Dans seccion.html
et avec les URL
J’ai cherché la CACHE et il y a une seule fichier ’seccion-76.f80c9e’ avec le premieres 10 articles (ou le derniére page recalcule).
Ainsi, je croi que c’est un probléme avec les INCLURE et la cache. J’ai cherché dans le code de SPIP et il paraît que
<INCLURE(seccion.php3) {id_rubrique}>
généré un seul fichier a la CACHE pour chaque rubrique ’seccion-76...’ (76 c’est le id_rubrique actuel). Ainsi, il faut générer a la CACHE des fichiers pout chaque rubrique-debut (seccion-76-0..., seccion-76-10...) et pour ça il faut un deuxiéme critére dans le INCLURE avec le debut.J’ia ne sais pas s’il y a maniére pour faire ça, mais j’ai utilisé un “truc” pour ajouter des variables a l’URL dans le contexte actuel (il y a une spip-contrib a tester avec ça id_article=488)
Dans rubrique.html
Dans mes_fonctions.php3 il faut le filtre :
S’il vous plaît : ¿Il y a des personnes avec pagination dans INCLURE qui ça marche sans des “trucs” ?
J’ia ajouté aussi cêtte truc-ci a spip-contrib (id_article=496)
Salut
Jose M Sánchez
Sevilla
España
Répondre à ce message
Désolé, mais je n’arrive absolument pas à faire marcher ce système de pagination :
- en SPIP 1.5.2, la page est blanche (développement local) et
- en SPIP 1.7, ... j’ai des rubrique vides, ce qui n’est absolument pas le cas.
J’ajouterai que les commentaires et l’aide sont insuffisants.
J’adore SPIP, et j’aimerais pouvoir utiliser des trucs comme ça, mais ... malgré tous mes essais d’une journée, ma compréhension partielle mais suffisante de SPIP et php, rien n’y fait.
Développons SPIP, mais développons vraiment pour tous !!!
Sans rancune ;-o)
François
Répondre à ce message
Quelqu’un aurait-il Xpagination ?
Le site de boomtchak étant fermé, le script n’y est plus.
Amicalement
Grégoire
Répondre à ce message
Suite de la precedente demande :
Pour utiliser cette boucle, je n’utilise pas rubrique.php3 mais mot.php3...
Par ailleurs, quand j’affiche la page dans le navigateur avec une URL du type :
.../mot.php3
j’obtiens bien le resultat « il n’y a pas d’article dans cette rubrique »
En revanche si l’URL est du type :
.../mot.php3 ?id_mot=10
alors j’obtiens le message d’erreur dont je parle dans le precedent message.
Je ne sais pas si cela aidera...
merci encore
est-ce que tu as essayé la nouvelle version mise en ligne aujourd’hui ? ton problème ressemble à celui décrit dans l’article et qui est fixé depuis (ps : il semble cela dit qu’il s’agisse d’un problème spécifique a easyphp car je ne l’ai pas rencontré lors de mes tests (local sous mac os x et sur mon site)
Je suis passé ce jour de la version II à la III. Le problème reste inchangé.
Curieux, c’est pourtant cette version qui fonctionne ici :
http://wb.attac.be/mot12.html
Suggestions :
- As-tu adapté le code de la boucle à l’option choisie ? pour une page mot, il faut bien sur mettre :
$idtype=#ID_MOT; $type = "mot";
(à la place de
$idtype=#ID_RUBRIQUE; $type = "rubrique";
)- Penser à faire recalculer la page et à vider le cache du navigateur
Je l’avais pas fait (ignorant que je suis !!)...Ceci dit cela ne fonctionne toujours pas. J’ai refait toute la manip depuis le debut...rien n’y fait...toujours la même erreur...
Est que l’on peut avoir un affichage de type 1|2|3...
Si oui comment faire ?
Répondre à ce message
Bonjour,
j’ai bien utilisé ce script pour paginer une liste d’articles à l’intérieur d’une page rubrique.
Par contre, je n’ai pas réussi la mise au point sur le résultat d’une recherche, faute de trouver le bon param à utiliser. Le nombre de pages est bien calculé, mais c’est toujours la première qui s’affiche.
Quelqu’un aurait-il réussi ce type de mise en page ?
Si je trouve une solution, je vous le dis, promis..
Répondre à ce message
Bonjour,
La boucle affiche 76 Articles en haut de la rubrique.
Je ne voudrai que le nombre et non le mot Articles à la suite du chiffre.
Est-ce possible et comment. J’ai beau chercher...
Merci,
Michel
A quoi correspond : $idtype=#ID_BREVE ; par exemple
Comment fait on si l’on veut afficher la liste des brèves avec une sélection sur un mot clé ?
MErci
Répondre à ce message
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
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.
Suivre les commentaires : |