Pagination forum avec reprise du dernier message

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Pagination forum avec reprise du dernier message

par spirou » 30 août 2006, 14:00

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 !

par Ryle » 28 août 2006, 23:49

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) );

par spirou » 28 août 2006, 22:03

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.

par alexbad » 27 août 2006, 06:19

À 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 .

Pagination forum avec reprise du dernier message

par spirou » 26 août 2006, 16:29

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.