Accueil
Forums
Turoriaux
Inscription
Connexion
Fil RSS
Bienvenue invité !
Samedi 22 Novembre 2008
Vous êtes ici: Crea-paradise.com > Forums > Entraide > PHP > [Résolu] Pagination > Lecture du sujet

[Résolu] Pagination

Du style 12345....X


1
Auteur Message
> Posté le : 29/09/2008 18h20
Aucun avatar


Groupe : Membres
Messages : 70

Salutation à tous, voici mon nouveau problème:

J'ai donc mon système de pagination, mais le hic c'est que si il doit afficher 45 pages, il va afficher 1234567890111213......45 sans les pointillés.
J'aimerais afficher le nombre de pages de la manière suivante:

12345....X  (X étant la dernière page, si il y a moins de 10 pages)
et 123...XYZ  (X Y Z étant les trois dernière pages, si il y a plus de 10 pages)

Merci de m'aider, SVP je galère, c'est assez difficile ce truc

Merci ++<attention></attention>

PHP Dev en force 
> Posté le : 19/10/2008 19h38
Aucun avatar


Groupe : Membres
Messages : 70

Bon ya plus personne sur ce forum, 

PHP Dev en force 
> Posté le : 19/10/2008 19h56
Avatar de lbeetls01


Groupe : Admins
Messages : 2070

Pourrais-tu nous donner le code de ton système de pagination ?
C'est plus simple si on apporte les modifs sur quelque chose de déjà existant =).


> Posté le : 20/10/2008 01h17
Aucun avatar


Groupe : Membres
Messages : 70

Oui ok, je vous joins ça demain.

Merci, je croyais qu'il yavais plus personne .

+++

PHP Dev en force 
> Posté le : 20/10/2008 03h14
Aucun avatar


Groupe : Membres
Messages : 70

Voici le code:

Code PHP:
<?php
$nombreDeMessagesParPage = 5;
$retour = web_query('SELECT COUNT(*) AS msgrep FROM replyforum WHERE titrerep="'.$_GET['sujet'].'" AND catnamerep="'.$_GET['cat'].'"');
$donnee = mysql_fetch_array($retour);
$totalDesMessages = $donnee['msgrep'];
$nombreDePages  = ceil($totalDesMessages / $nombreDeMessagesParPage);
 
if ($nombreDePages <= 2)
{
echo "";
}
if ($nombreDePages >= 2)
{
echo 'Page: ';
 
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
// Si le nombre de page est egale ou inferieur a 5 on affiche seulement les pages comme suit  : 12345
echo '<a href="index.php?name=voireponse&sujet=';echo $_GET['sujet'];echo'&npage=' . $i . '">' . $i . '</a>';
}
}
if (isset($_GET['npage']))
{
$npage = $_GET['npage']; // On récupère le numéro de la page indiqué dans l'adresse
}
else // La variable n'existe pas, c'est la première fois qu'on charge la page
{
$npage = 1; // On se met sur la page 1 (par défaut)
}
 
$premierMessageAafficher = ($npage - 1) * $nombreDeMessagesParPage;
$rep_subjet = web_query('SELECT * FROM replyforum WHERE titrerep="'.$_GET['sujet'].'" AND catnamerep="'.$_GET['cat'].'" ORDER BY id ASC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
?>


Donc comme je dit, j'aimerais une système de pagination dans le style Page: 1234....(dernière page si plus de 7 page).

J'ai essayer en mettant une variable définissant la page actuelle, mais en vain.

Voici donc ceci, j'espère que ça pourras vous aider.

Merci de votre aide, @++  

PHP Dev en force 
> Posté le : 20/10/2008 06h59
Avatar de lbeetls01


Groupe : Admins
Messages : 2070

Essaie avec ça :
Code PHP:
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
        // Si le nombre de page est egale ou inferieur a 5 on affiche seulement les pages comme suit  : 12345
        if($nombreDePages > 7 && $i > 4)
        {
                if($i == 5) echo '...';
                if($i == $nombreDePages) echo '<a href="index.php?name=voireponse&sujet=';echo $_GET['sujet'];echo'&npage=' . $i . '">' . $i . '</a>';
        }
        else
        {
                echo '<a href="index.php?name=voireponse&sujet=';echo $_GET['sujet'];echo'&npage=' . $i . '">' . $i . '</a>';
        }
}


à la place de ça :
Code PHP:
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
// Si le nombre de page est egale ou inferieur a 5 on affiche seulement les pages comme suit  : 12345
echo '<a href="index.php?name=voireponse&sujet=';echo $_GET['sujet'];echo'&npage=' . $i . '">' . $i . '</a>';
}


> Posté le : 20/10/2008 07h20
Avatar de Drahl


Groupe : Membres
Messages : 134

Ta variable qui défini ta page actuelle elle existe forcément puisque tu as $_GET['npage']

Donc il suffit que dans ta boucle FOR qui affiche les pages, tu créés des condition IF imbriqué les unes dans les autres autant de fois que tu veux afficher tes pages, en commençant par un isset sur npage pour prendre en compte la première visite sur la page. Et pour afficher les pages que tu veux tu fait par exemple IF ($_GET['npage'] == i + 3) echo i; pour afficher la troisieme page aprés la page actuelle.

Tu vas avoir un code un peut long, mais ça me parrait etre le plus simple.
J'espère que j'ai été clair.
> Posté le : 20/10/2008 09h02
Avatar de lbeetls01


Groupe : Admins
Messages : 2070

Ah oui, dans mon code j'ai pas pris en compte la page en cours . Il va tout le temps t'afficher 1234...DERNIEREPAGE.

EDIT :
Essaie avec ça :
Code PHP:
if (isset($_GET['npage']))
{
        $npage = $_GET['npage']; // On récupère le numéro de la page indiqué dans l'adresse
}
else // La variable n'existe pas, c'est la première fois qu'on charge la page
{
        $npage = 1; // On se met sur la page 1 (par défaut)
}
 
if ($nombreDePages <= 2)
{
        echo '';
}
if ($nombreDePages >= 2)
{
        echo 'Page: ';
        $pointsBeforePage = false; // Défini si on a déjà affiché les ... avant la page en cours
        $pointsAfterPage = false; // Défini si on a déjà affiché les ... après la page en cours
 
        for ($i = 1 ; $i <= $nombreDePages ; $i++)
        {
                // Si le nombre de page est egale ou inferieur a 5 on affiche seulement les pages comme suit  : 12345
                if($i == $npage || ($i - 1) == $npage || ($i - 2) == $npage || ($i + 1) == $npage || ($i + 2) == $npage || $i == $nombreDePages || $i == 1)
                        {
                        echo '<a href="index.php?name=voireponse&sujet=';echo $_GET['sujet'];echo'&npage=' . $i . '">' . $i . '</a>';
                        }
                        else
                        {
                                if($i < $npage && $pointsBeforePage == false)
                                {
                                        echo '...';
                                        $pointsBeforePage = true;
                                }
                                
                                if($i > $npage && $pointsAfterPage == false)
                                {
                                        echo '...';
                                        $pointsAfterPage = true;
                                }
                }
        }
}


à la place de :
Code PHP:
if ($nombreDePages <= 2)
{
echo "";
}
if ($nombreDePages >= 2)
{
echo 'Page: ';
 
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
// Si le nombre de page est egale ou inferieur a 5 on affiche seulement les pages comme suit  : 12345
echo '<a href="index.php?name=voireponse&sujet=';echo $_GET['sujet'];echo'&npage=' . $i . '">' . $i . '</a>';
}
}
if (isset($_GET['npage']))
{
$npage = $_GET['npage']; // On récupère le numéro de la page indiqué dans l'adresse
}
else // La variable n'existe pas, c'est la première fois qu'on charge la page
{
$npage = 1; // On se met sur la page 1 (par défaut)
}


> Posté le : 20/10/2008 16h13
Avatar de Drahl


Groupe : Membres
Messages : 134

tu prends pas en compte la première et dernière page avec ton code lbeetls01, pour aller plus rapidement en début ou fin de liste, même si il y à 50 pages.
> Posté le : 20/10/2008 18h16
Aucun avatar


Groupe : Membres
Messages : 70

Citation: Drahl
tu prends pas en compte la première et dernière page avec ton code lbeetls01, pour aller plus rapidement en début ou fin de liste, même si il y à 50 pages.


Si je t'assure miter, cela fonctionne trés bien!
Merci à toi lbeetls01, ca donne bien:  (tester avec 10 pages)

123...10  si en première page

ou

1...34567...10  si dans pages du milieu

ou

1...8910  si en dernière page


Merci à toi!

PHP Dev en force 
> Posté le : 21/10/2008 06h27
Avatar de Drahl


Groupe : Membres
Messages : 134

oki dsl, tan mieux alors.
> Posté le : 22/10/2008 09h28
Avatar de lbeetls01


Groupe : Admins
Messages : 2070

Content d'avoir pu t'aider et que ça marche =).


1