Page 1 sur 1

Pagination forum avec reprise du dernier message

Posté : 26 août 2006, 16:29
par spirou
Bonjour à tous,

J'ai un petit problème concernant la pagination des messages d'un forum avec reprise du message de la page précédente, il se situe sur la dernière page, je n'arrive pas à faire que si le nombre de message tombe juste, que le lien vers la dernière page ne soit pas seulement la reprise du dernier message.

C'est pas très clair, je vais faire un exemple.

Mon code actuel :
//***************
    //  pagination des liens vers les messages
    
    // nombre de pages du sujet
    $nb_page = ceil($l['nb_message']/$nb_sujet_page);
    
    //ajout des messages repris
    $nb_page = ceil(($l['nb_message'] + $nb_page)/$nb_sujet_page) + 1;
    $k = liste_page($page, $nb_page, 5);
    $url = 'forum-sujet-' . $l['id'] . '-' . rewrite($l['titre']);
    $liens_pages = '';
    $nc=0;
    foreach($k as $v)
    {
        $liens_pages .= ( $v != '...') ? '<a href="' . $url . '-page' . $v . '.html">' . $v . '</a>' : '<span>'. $v . '</span>';
        $nc += strlen($v);
        if( $nc > 7 )
        {
            $liens_pages .= '<br />';
            $nc = 0;
        }
    }
    $page_dernier_message = (max($k) != 1) ? '-page' . max($k) : ''; 
Et un exemple avec 13 messages sur une pagination de 3 messages/page :

Code : Tout sélectionner

1 3 5 7 9 11 13 2 4 6 7 10 12 3 5 7 9 11 13
Comme vous le constatez, la dernière page ne contient que la reprise du sujet précédent, c'est donc ce que je voudrais éviter, je pense qu'il faut que je me serve du modulo, mais j'arrive pas à obtenir ce que je veux :oops:

Si vous pouviez me fournir quelques conseils, ce serait bien, car je patauge un peu, en plus je suis sûr que c'est bête :roll:

Merci.

Posté : 27 août 2006, 06:19
par alexbad
À priori la solution m'apparaît toute simple :
<?php
if ($nb_page % 3 == 1)
{
      $nb_page--;
}
?>
Tu avais bien vu sur le modulo : je vérifie si le reste est 1. Si c'est 1, ça veut dire qu'une page ne contient qu'un message donc officiellement, c'est la dernière et, cet unique message ne peut être que la reprise du dernier de la page précédente :D .

Posté : 28 août 2006, 22:03
par spirou
Merci, mais ça ne va pas, j'ai toujours un décalage.

Ma logique dit que on sélectionne le total des messages, de là on divise par 3, et l'on soustrait un(1er pages message non repris) pour rajouter au total des messages, mais à chaque fois j'ai un décalage à plus ou moins long terme lorsque je rajoute des entrées à la table, ou que je modifie le nbre à afficher.

De plus je suis obligé de rajouter 1 au total des pages, et ça, je comprend pas pourquoi.....

Je cherche... ... ... ... je finirais bien par trouver.

Posté : 28 août 2006, 23:49
par Ryle
Dans ta logique, tu affiche le dernier message de chaque page au début de la page suivante. On peut aussi considérer dans l'autre sens, que le premier message de chaque page est affiché à la fin de la page précédente (exception faite du premier). Du coup c'est comme si tu affichais un élément de moins sur chaque page :

Code : Tout sélectionner

1 3 5 7 9 11 13 2 4 6 8 10 12 (3) (5) (7) (9) (11) (13)
Pour déterminer ton nombre de page, il te suffit donc de faire :
$nbPagesTotal = ceil ( $nbMsgTotal / ( $nbMsgParPage - 1) );

Posté : 30 août 2006, 14:00
par spirou
Oui, c'est ça :D

En fait ce qui me mettait en dedans, c'est que je faisais au début un ceil() et encore un ceil(), alors que c'était d'abord un floor() et ensuite un ceil().

Merci !