Numéros de page

Soyez le premier à donner votre avis sur cette source.

Snippet vu 10 268 fois - Téléchargée 28 fois

Contenu du snippet

Suite à question sur le forum: Comment, pour une requete qui retourne beaucoup de résultats, afficher les numéros de page...

Affiche la page courante, un certain nombre de pages avant et après, le lien précédente et suivante ainsi que première et dernière...

Avec la configuration donnée, cela peut faire:
Première Précédente 4 5 6 7 8 9 10 11 12 13 14 Suivante
(8 est la page courante)

Source / Exemple :


$nb_results_p_page = 20; // nombre de résultats par page
$nb_avant = 4; // nombre de page avant la page courante
$nb_apres = 6; // nombre de page après la page courante
$premiere = 1; // aficher le lien "première page" (1 ou 0)
$derniere = 0; // afficher le lien "dernière page" (1 ou 0)
$courant = empty($_GET['page']) ? 1 : $_GET['page']; // page
$start = ($courant - 1) * $nb_results_p_page; // start (requete mysql)

// comptage du nombre de lignes de la base
$result = mysql_query("SELECT count(id) FROM table");
if(!$result)
{
   // redirection erreur
   header("location: erreur.php");
   exit;
}
$ret = mysql_fetch_array($result);
// nombre de lignes
$nb_results = $ret[0];

// exemple de requete
$result = mysql_query("SELECT * FROM table LIMIT $start, $nb_results_p_page");

// nombre total de pages
$nb_pages = ceil($nb_results / $nb_results_p_page);
// nombre de pages avant
$avant = $courant > ($nb_avant + 1) ? $nb_avant : $courant - 1;
// nombre de pages après
$apres = $courant <= $nb_pages - $nb_apres ? $nb_apres : $nb_pages - $courant;

// première page
if($premiere && $courant - $avant > 1)
   echo '<a href="' . $_SERVER['SCRIPT_NAME'] . '">Première</a>&nbsp;&nbsp;';
   
// page précédente
if($courant > 1)
   echo '<a href="' . $_SERVER['SCRIPT_NAME'] . '?page=' . ($courant - 1) . '">Précédente</a>&nbsp;&nbsp;';

// affichage des numéros de page
for($i = $courant - $avant; $i <= $courant + $apres; $i++)
{
   // page courante
   if($i == $courant)
      echo '<span style="color: #FF0000;">' . $i . '</span>&nbsp;&nbsp;';
   else
      echo '<a href="' . $_SERVER['SCRIPT_NAME'] . '?page=' . $i . '">' . $i . '</a>&nbsp;&nbsp;';
}

// page suivante
if($courant < $nb_pages)
   echo '<a href="' . $_SERVER['SCRIPT_NAME'] . '?page=' . ($courant + 1) . '">Suivante</a>&nbsp;&nbsp;';
   
if($derniere && $courant + $apres < $nb_pages)
   echo '<a href="' . $_SERVER['SCRIPT_NAME'] . '?page=' . $nb_pages . '">Dernière</a>&nbsp;&nbsp;';

A voir également

Ajouter un commentaire

Commentaires

VestaX
Messages postés
376
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
24 avril 2013
-
Salut,

j'arrive un peu tard :p

Excellent mais cependant il y a un petit problème. Exemple, j'ai 8 pages en tout, et quand j'arrive à la 8eme page, ça continue de paginer à la 9eme, 10eme etc.. et bien entendu la 9eme, 10eme etc.. sont vides.

Ca aurait été bien de pouvoir mettre un système de blocage quand ça arrive à la fin.
260686
Messages postés
1
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
27 juillet 2010
-
Waoww
Merci coockiesch,
Juste une petite information : en pgsql on change
"SELECT * FROM table LIMIT $start, $nb_results_p_page"
en
"SELECT * FROM table LIMIT $nb_results_p_page OFFSET $start"
cdie
Messages postés
31
Date d'inscription
jeudi 3 décembre 2009
Statut
Membre
Dernière intervention
12 février 2012
2 -
Nikel, exactement ce que je cherchais ! Merci :)
staykool
Messages postés
1
Date d'inscription
mercredi 30 août 2006
Statut
Membre
Dernière intervention
16 mai 2007
-
electroweb, est-ce que tu as mis le code dans une classe finalement?

Moi j'ai ajouter un peu de style sur l'affichage et j'utilise aussi mysqli au lieu de mysql... Je vous en fait donc part! j'espère que tout sera beau... c'est la première fois que je répond à un commentaire! :o))

$nb_results_p_page = 1; // nombre de résultats par page
$nb_avant = 3; // nombre de page avant la page courante
$nb_apres = 3; // nombre de page après la page courante
$premiere = 1; // aficher le lien "première page" (1 ou 0)
$derniere = 1; // afficher le lien "dernière page" (1 ou 0)
$courant = empty($_GET['page']) ? 1 : $_GET['page']; // page
$start = ($courant - 1) * $nb_results_p_page; // start (requete mysql)

// comptage du nombre de lignes de la base
$sqlSelectUser = "SELECT count(id_user) FROM user";
$resSelectUser = $mysqli->query($sqlSelectUser);
$nb_user = $resSelectUser->fetch_array();

// nombre de lignes
$nb_results = $nb_user[0];

// nombre total de pages
$nb_pages = ceil($nb_results / $nb_results_p_page);

// nombre de pages avant
$avant = $courant > ($nb_avant + 1) ? $nb_avant : $courant - 1;

// nombre de pages après
$apres = $courant <= $nb_pages - $nb_apres ? $nb_apres : $nb_pages - $courant;

echo '

';

// première page
if($premiere && $courant > 1)
echo '<li>[' . $_SERVER['SCRIPT_NAME'] . ' Première] </li>';
else
echo '<li class="disablepage">Première</li>';

// page précédente
if($courant > 1)
echo '<li>[' . $_SERVER['SCRIPT_NAME'] . '?page=' . ($courant - 1) . ' Précédente] </li>';
else
echo '<li class="disablepage">Précédente</li>';

// affichage des numéros de page
for($i = $courant - $avant; $i <= $courant + $apres; $i++)
{

// page courante
if($i == $courant)
echo '<li class="currentpage">' . $i . '</li>';
else
echo '<li>[' . $_SERVER['SCRIPT_NAME'] . '?page=' . $i . ' ' . $i . '] </li>';
}

// page suivante
if($courant < $nb_pages)
echo '<li>[' . $_SERVER['SCRIPT_NAME'] . '?page=' . ($courant + 1) . ' Suivante] </li>';
else
echo '<li class="disablepage">Suivante</li>';

if($derniere && ($courant < $nb_pages))
echo '<li>[' . $_SERVER['SCRIPT_NAME'] . '?page=' . $nb_pages . ' Dernière] </li>';
else
echo '<li class="disablepage">Dernière</li>';

echo '


Page '.$courant.' sur '.$nb_pages.'
';

===============
CSS
===============

.pagination {padding: 2px;}
.pagination ul {margin: 0; padding: 0; text-align: left; font-size: 16px;}
.pagination li {list-style-type: none; display: inline; padding-bottom: 1px;}
.pagination a, .pagination a:visited {padding: 0 5px; border: 1px solid rgb(0,51,102); text-decoration: none; color: #2e6ab1;}
.pagination a:hover, .pagination a:active {border: 1px solid #2b66a5; color: #000; background-color: lightblue;}
.pagination li.currentpage {font-weight: bold; padding: 0 5px; border: 1px solid navy; background-color: rgb(0,51,102); color: #FFF;}
.pagination li.disablepage {padding: 0 5px; border: 1px solid rgb(145,145,145); color: #929292;}
.pagination li.currentpage, .pagination li.disablepage { /*IE 6 and below. Adjust non linked LIs slightly to account for bugs*/ margin-right: 5px; padding-right: 5px;}
coockiesch
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3 -
Salut!
Que la pagination... :-)

C'est à toi de faire l'affichage de tes données! Je l'air pas fait car c'était pas le but de la source et ça change trop d'un cas à l'autre...

@++

R@f

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.