Page 1 sur 1

pagination avec php & mysql

Posté : 18 juin 2008, 09:57
par subversive_element
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>"; } ?>

Posté : 18 juin 2008, 10:14
par katagoto
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 ^^

Posté : 18 juin 2008, 12:45
par subversive_element
Merci pour cette piste, je vais l'explorer et je reviens si jamais 8-)

Posté : 18 juin 2008, 13:53
par Alkann
Tu peux également jeter un œil du côté de la fonction de pagination de ce forum.

Posté : 19 juin 2008, 10:58
par subversive_element
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

Posté : 19 juin 2008, 11:35
par Sékiltoyai
Bah c'est un forum phpBB2, il te suffit de télécharger les sources du forum sur le site officiel…

Posté : 19 juin 2008, 11:40
par subversive_element
Si qqun l'avait sous la main ça m'arrangerait...mais bon. désolé pour le dérangement.

voici un de mes codes que j'ai developper

Posté : 23 juin 2008, 16:52
par openup
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