[PHP & MySQL] [Astuces] Numéros de page

Titre: Numéros de page
Date: Juin 2004
Language: PHP / MySQL
Description: Permet de créer des liens vers les autres pages quand une requête MySQL retourne beaucoup de résultats.

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)

<?php
$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;';
?>

Capture d’écran: ici

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *