Présentation
Cette fonction permet de créer une pagination. Elle ne fait pas qu'afficher bêtement la liste des liens mais il est possible de mettre une limitation du nombre de liens avant et après la page actuelle.
La fonction
function pagination($page,$table,$nombre_entree_par_page,$nombre_lien_max)
{
//On calcule le nombre total d'entrée dans la table.
$retour1 = mysql_query('SELECT COUNT(*) AS nbre_entree FROM '.$table);
$donnees1 = mysql_fetch_array($retour1) or die (mysql_error());
$total = $donnees1['nbre_entree'];
//On récupère le GET du lien.
if (!empty($_GET['page']))
{
$lien = intval($_GET['page']);
}
else
{
$lien = 1;
}
//On calcule le nombre de page.
$nombre_de_page = ceil($total / $nombre_entree_par_page);
//préparation au début du for
$nombre_lien_avant = $lien - $nombre_lien_max;
if ($nombre_lien_avant <= 0)
{
$nombre_lien_avant = 1;
}
//préparation a la fin du for.
$nombre_lien_apres = $lien + $nombre_lien_max;
if ($nombre_lien_apres >= $nombre_de_page)
{
$nombre_lien_apres = $nombre_de_page;
}
//Si le nombre de page != 1 on affiche pas le cadre de pagination
if ($nombre_de_page != 1)
{
//On écrit une boucle pour écrire les liens vers les différentes pages.
echo 'Page(s) : <ul class="pagination">'."\n";
for ($i = $nombre_lien_avant; $i <= $nombre_lien_apres; $i++)
{
//si on commence le for, on vois si on est sur la première page ou pas.
if ($i == $nombre_lien_avant)
{
if ($_GET['page'] == 1 or $lien == 1)
{
echo "\t".'<li class="precedent-off">Précédent</li>'."\n";
echo "\t".'<li class="actif">'.$i.'</li>'."\n";
}
else
{
$i_precedent = $_GET['page'] - 1;
echo "\t".'<li class="precedent"><a href="?page='.$i_precedent.'">Précédent</a></li>'."\n";
echo "\t".'<li><a href="?page='.$i.'">'.$i.'</a></li>'."\n";
}
}
//on souligne le numéro de la page sélectionnée.
elseif($i == $_GET['page'])
{
if($i == $nombre_de_page)
{
//echo 'dernier lien : '.$i;
if ($_GET['page'] == $nombre_de_page)
{
echo "\t".'<li class="actif">'.$i.'</li>'."\n";
echo "\t".'<li class="suivant-off">Suivant</li>'."\n";
}
else
{
$i_suivant = $_GET['page'] + 1;
echo "\t".'<li><a href="?page='.$i.'">'.$i.'</a></li>'."\n";
echo "\t".'<li class="suivant"><a href="?page='.$i_suivant.'">Suivant</a></li>'."\n";
}
}
else
{
echo "\t".'<li class="actif">'.$i.'</li>'."\n";
}
}
//si on termine le for, on vois si on a sélectionné le dernier lien ou pas.
else if ($i == $nombre_lien_apres)
{
//echo 'dernier lien : '.$i;
if ($_GET['page'] == $nombre_lien_apres)
{
echo "\t".'<li class="suivant-off">Suivant</li>'."\n";
}
elseif (empty($_GET['page']) and $lien == 1)
{
$i_suivant = 2;
echo "\t".'<li><a href="?page='.$i.'">'.$i.'</a></li>'."\n";
echo "\t".'<li class="suivant"><a href="?page='.$i_suivant.'">Suivant</a></li>'."\n";
}
else
{
$i_suivant = $_GET['page'] + 1;
echo "\t".'<li><a href="?page='.$i.'">'.$i.'</a></li>'."\n";
echo "\t".'<li class="suivant"><a href="?page='.$i_suivant.'">Suivant</a></li>'."\n";
}
}
//sinon on affiche le lien correspondant a $i.
else
{
echo "\t".'<li><a href="?page='.$i.'">'.$i.'</a></li>'."\n";
}
}
echo '</ul>';
}
$premier_message = ($lien - 1) * $nombre_entree_par_page;
return $premier_message;
}
Style CSS
.pagination {border:0; margin:0; padding:0;}
.pagination li{
border:0; margin:0; padding:0;
font-size:11px;
list-style:none;
}
.pagination li, .pagination a {
border-right:solid 1px #DEDEDE;
margin-right:2px;
}
.pagination .precedent-off,
.pagination .suivant-off {
color:#888888;
display:block;
float:left;
font-weight:bold;
padding:3px 4px;
}
.pagination .suivant a,
.pagination .precedent a{
border:none;
font-weight:bold;
}
.pagination li.actif{
color:#000000;
font-weight:bold;
display:block;
float:left;
padding:4px 6px;
}
.pagination a:link,
.pagination a:visited {
color:#0e509e;
display:block;
float:left;
padding:3px 6px;
text-decoration:underline;
}
.pagination a:hover{
text-decoration:none;
}
Utilisation
Pour utiliser cette fonction, il faut déjà être connecté à la base de données.
Voici comment l'appeler :
pagination($page,$table,$nombre_entree_par_page,$nombre_lien_max);
$page : la page actuelle ($_GET['page'] par exemple)
$table : table sur laquelle la pagination doit être faite
$nombre_entree_par_par : C'est assez clair : le nom d'entrées q'affiche une page
$nombre_lien_max : Nombre max. de lien après et avant la page actuelle.