pagination avec php & mysql

Petit nouveau ! | 8 Messages

18 juin 2008, 09:57

Bonjour,

Je cherche à organiser mes résultats de requête mysql de façon propre, mais j'ai beaucoup de résultats. J'ai fait plusieurs recherches sur le web sans succès... Je souhaiterais savoir comment arriver au résultat suivant en ce qui concerne la pagination:

<< 1 2 3 4 ... 59 60 61 >>

J'aimerais donc afficher seulement les premières et dernières pages de recherche (bien sûr les numéros de page évoluent en fonction d'où on se trouve, un peu à la manière de ce site). Actuellement, j'ai une centaine de numéros et ça le fait vraiment pas. Quelle méthode devrais-je appliquer? Je ne suis pas à la recherche de scripts tous faits, je cherche plutôt à comprendre ce que je fais...

Merci et désolé si cette question a déjà été posée souvent.

Voici mon code actuel, assez basique:

Code : Tout sélectionner

<? $nombre=ceil($n_r/$limit); if($debut>0) { $page = ($debut/$limit)+1; echo "<a href=f_b.php?action=search&control=1&debut=".($debut-$limit)."&page=".$page." class=\"limit\"><img src=\"images/fleche_ver_g.gif\" border=0></a> "; } if ($nombre>1) { for($i=1; $i<=$nombre; $i++) { if($page==$i){ echo "<a href=f_b.php?action=search&control=1&tri=".$tri."&ascdesc=".$ascdesc."&debut=".(($i-1)*$limit)."&page=".$i." class=\"limit\" style=\"font-size:14px;text-decoration:underline;font-weight:bold;color:black\">".$i."</a> "; }else{ echo "<a href=f_b.php?action=search&control=1&tri=".$tri."&ascdesc=".$ascdesc."&debut=".(($i-1)*$limit)."&page=".$i." class=\"limit\" style=\"font-size:11px;text-decoration:none;color:black\">".$i."</a> "; } } } if(($debut+$limit)<$nrows) { $page = ($debut/$limit)+1; echo "<a href=f_b_f.php?action=search&control=1&tri=".$tri."&ascdesc=".$ascdesc."&debut=".($debut+$limit)."&page=".$page." class=\"limit\"><img src=\"images/fleche_ver_d.gif\" border=0></a>"; } ?>

Mammouth du PHP | 1668 Messages

18 juin 2008, 10:14

Admettons 2 variables :
$NbPages;
$PageActuelle;

if($NbPages>9){// Si le nombre de pages est supérieure à 9
    if($NbPages==1) echo '<b>1</b> 2 3';
    elseif($PageActuelle==2) echo '1 <b>2</b> 3 4 ... '.$NbPages-2.' '.$NbPages-1.' '.$NbPages.';
    elseif($PageActuelle==3) echo '1 2 <b>3</b> 4 5 ... '.$NbPages-2.' '.$NbPages-1.' '.$NbPages.';
    elseif($PageActuelle==4) echo '1 2 3 <b>4</b> 5 6 ... '.$NbPages-2.' '.$NbPages-1.' '.$NbPages.';
    elseif($PageActuelle==5) echo '1 2 3 4 <b>5</b> 6 7 ... '.$NbPages-2.' '.$NbPages-1.' '.$NbPages.';
    elseif($PageActuelle==6) echo '1 2 3 4 5 <b>6</b> 7 8 ... '.$NbPages-2.' '.$NbPages-1.' '.$NbPages.';
    elseif($PageActuelle>6 && $PageActuelle<($NbPages-6)) echo '1 2 3 ... '.$PageActuelle-2.' '.$PageActuelle-1.' <b>'.$PageActuelle.'</b> '.$PageActuelle+1.' '.$PageActuelle+2.' ... '.$NbPages-2.' '.$NbPages-1.' '.$NbPages.'
// Etc.
}
else echo '1 2 3 4 5 6 7 8';
C'est pas très éllaboré mais tu as compris ^^
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Petit nouveau ! | 8 Messages

18 juin 2008, 12:45

Merci pour cette piste, je vais l'explorer et je reviens si jamais 8-)

Eléphant du PHP | 79 Messages

18 juin 2008, 13:53

Tu peux également jeter un œil du côté de la fonction de pagination de ce forum.

Petit nouveau ! | 8 Messages

19 juin 2008, 10:58

Tu peux également jeter un œil du côté de la fonction de pagination de ce forum.
Est-elle disponible quelque part? Ce serait sympa si tu pouvais la poster.

Merci

ViPHP
ViPHP | 5924 Messages

19 juin 2008, 11:35

Bah c'est un forum phpBB2, il te suffit de télécharger les sources du forum sur le site officiel…

Petit nouveau ! | 8 Messages

19 juin 2008, 11:40

Si qqun l'avait sous la main ça m'arrangerait...mais bon. désolé pour le dérangement.

Petit nouveau ! | 2 Messages

23 juin 2008, 16:52

if($ttact > $aff)
{
$npages=ceil($ttact/$aff);
echo "Page &nbsp;:&nbsp;";
if($npages < 16)
{
for($b=1; $b <= $npages; $b++)
{
if($b != $st)
echo '
<a href="?action=letter&page='.$b.$loc.'&affparpage='.$aff.'" class="page_link_top" title="page '.$b.'">'.$b.'</a>&nbsp;
';
else
echo '<a class="page_link_top" style="color:#00CC99;"><strong>'.$b.'</strong></a>&nbsp;
';
}
}
else
{
$debut=$st - 5;
if($debut<1)
$debut=1;
$fin=$st + 5;
if($fin>$npages)
$fin=$npages;

if($debut > 1 )
echo '
<a href="?action=letter&page=1'.$loc.'&affparpage='.$aff.'" class="page_link_top" title="page 1">1</a>&nbsp;...
';
for($b=$debut; $b <= $fin; $b++)
{
if($b != $st)
echo '
<a href="?action=letter&page='.$b.$loc.'&affparpage='.$aff.'" class="page_link_top" title="page '.$b.'">'.$b.'</a>&nbsp;
';
else
echo '<a class="page_link_top" style="color:#00CC99;"><strong>'.$b.'</strong></a>&nbsp;
';
}

if($fin < $npages)
echo '
...&nbsp;<a href="?action=letter&page='.$npages.$loc.'&affparpage='.$aff.'" class="page_link_top" title="page '.$npages.'">'.$npages.'</a>&nbsp;
';
}
}
avec
$aff= nombre d'affichage par page;
$ttact= nombre d'enregistrement(éponse de la requette);
sinon
si le nombre des pages est < a 16 on affiche tt les pages
sinon
on affiche
page : 1... 10 11 12 13 15 ... derniere page