Voici un petit bout de code près à l'utilisation, permettant d'effectuer une pagination et de choisir le nombre d'élément à afficher par page.

La pagination peut se faire de 2 façons:

  • Page par page (Page : 1-2-3-4-5)
  • <<Page précédente - Page Suivante>>

Cette option est à définir à la variable $navigation.

Pour choisir le nombre d'élément à afficher, on attribut un nombre entier à la variable $messages_par_page. Par exemple une valeur fixé à 7 affichera 7 éléments par page.

Dans ce code, je suis partit du principe que l'on affiche généralement le titre+lien et la description des éléments à paginer (comme sur les blogs). il faut donc correctement remplir les variables suivantes:

  • $nom_de_la_table="***"; ->Nom de la table.
  • $identifiant="***"; -> Champ id.
  • $titre="***"; -> Champ qui donne un titre à l'article ou au produit ou au commentaire ...
  • $description="***"; Champ qui donne une description de l'article ou du produit ...

La variable $nom_page correspond au nom de la page ou s'affiche vos articles ou autres. Par exemple un site dont les articles s'affichent de la façon suivant http://monsite.com/articles.php?id=2 donne donc pour la variable $nom_page="articles.php"

 <?php
/********************************************************************/
/*    CHAMPS A REMPLIR                                              */
/********************************************************************/
/*    Base de données                                               */
/********************************************************************/
$nom_du_serveur ="***";
$base ="***";
$nom_utilisateur ="***";
$passe ="***";
/********************************************************************/
/*       Fin Base de données                                        */
/********************************************************************/
//Nombre d'élément à afficher par page
$messages_par_page=1;
//Type de navigation 
//0=Suivant-Précédent
//1=Toutes les pages
$navigation=0;
//Nom de la base
$nom_de_la_table="***";
//identifiant - Généralement le champ id
$identifiant="***";
//Nom du champ affichant le titre
$titre="***";
//Nom du champ affichant la description
$description="***";
//Nom de la page ou s'affiche vos articles ex:page.php
$nom_page="***";
/********************************************************************/
/*      FIN CHAMPS A REMPLIR                                        */
/********************************************************************/
//Variable de connexion à la base de données
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
//Vérification d'accès à la base de données
mysql_select_db("$base") or die("Impossible d'ouvrir la base de données ");
//On récupère le contenu de la requête dans $entree_total
$entree_total = mysql_query("SELECT COUNT(*) AS total FROM $nom_de_la_table");
//On range $entree_total sous la forme d'un tableau.
$donnees_total=mysql_fetch_assoc($entree_total); 
//On récupère le total pour le placer dans la variable $total. $total correspond au 
nombre total de commentaires
$total=$donnees_total['total']; 
//Nous allons maintenant compter le nombre de pages. On fait donc une simple division . 
//ceil —>Arrondit le chiffre au nombre supérieur si il n'est pas entier
$nombre_de_pages=ceil($total/$messages_par_page);
// Si la variable $_GET['page'] existe...
if(isset($_GET['page'])) 
{
//$page_actuelle correspond au numéro de la page ou l'on se trouve pendant la navigation. 
//intval —  Retourne la valeur numérique entière équivalente d'une variable 
	$page_actuelle=intval($_GET['page']);
//Si la valeur de $page_actuelle est plus grande que $nombre_de_pages...     
	if($page_actuelle>$nombre_de_pages) 
	{
		$page_actuelle=$nombre_de_pages;
	}
}
// Sinon
else 
{
	$page_actuelle=1; // La page actuelle est la n°1    
}
// On calcul la première entrée à lire
$premiere_entree=($page_actuelle-1)*$messages_par_page; 
//Si il n'y a rien
if($total == 0){
	echo '<p><strong>Aucun article pour le moment :(!</strong></p>';
}
else
{
// La requête sql pour récupérer les articles en fonction de la page ou l'on se trouve.
	$retour_messages=mysql_query('SELECT '.$identifiant.','.$titre.','.$description.'
FROM '
.$nom_de_la_table.' ORDER BY '.$identifiant.' DESC LIMIT '.$premiere_entree.',
'
.$messages_par_page.''); //On boucle while($affiche = mysql_fetch_array($retour_messages)) { echo '<div class="cadre">
<h2><a title="'
.$affiche["$titre"].'" href="'.$nom_page.'?id='.$affiche["$identifiant"] .'">'.$affiche["$titre"].'</a></h2>
'
.nl2br($affiche["$description"]).'
</div>'
; }   //Pour l'affichage, on centre la liste des pages echo '<div style="text-align:center;">'; if($navigation==0){ //Cette partie affiche uniquement Suivant et Précédent $suivant=$page_actuelle+1; $precedent=$page_actuelle-1; //Si la variable est plus grand ou égal if($precedent>=1){ echo '<a class="pagination" title="Page précédente"
href="'
.$_SERVER['PHP_SELF'].'?page='.$precedent.'">Page précédent</a>'; } else { echo '<span class="pagination-inactif">Page précédent</span>'; } //Si la variable est plus petit ou égal if($suivant<=$nombre_de_pages){ echo '<a class="pagination" title="Page suivante"
href="'
.$_SERVER['PHP_SELF'].'?page='.$suivant.'">Page suivante</a>'; } else { echo '<span class="pagination-inactif">Page suivante</span>'; } } else if($navigation==1) { //Cette partie affiche une pagination complète de toutes les pages echo 'Page : '; for($i=1; $i<=$nombre_de_pages; $i++) //On fait notre boucle { //On va faire notre condition if($i==$page_actuelle) //Si il s'agit de la page actuelle... { echo '<span class="pagination-inactif">'.$i.'</span>'; } else { echo ' <a class="pagination" title="Page '.$i.'"
href="'
.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i.'</a> '; } } } echo '</div>'; mysql_close();   }   ?>
Pour que la pagination soit un peut plus sympa , on attribut des class CSS à celui-ci.
.cadre{
height: auto;
background:#ECFAFF;
border: 1px solid #D5F4FF;
margin:5px;
padding:5px;
}
.pagination{
border: 1px solid #000 ;
font-weight : bold;
background : #ECFAFF;
margin : 2px;
padding : 3px;
}
.pagination:hover{
background : #000;
}
.pagination-inactif{
border: 1px solid #000 ;
font-weight : bold;
background : #000;
color : white;
margin : 2px;
padding : 3px;
}

Vous pouvez voir un exemple de ce tutoriel en action sur la page http://creer.ton.site.free.fr/pagination.php

Catégorie PHP

Commentaire sur : Pagination page par page