Pagination page par page

Attention, depuis PHP 5.5.0, certaines extensions SQL sans doute utilisées dans ce tutoriel peuvent être obsolètes et seront supprimées dans le futur, vous devez donc adapter les codes! Exemples ici.

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/pagination1.php

Voir/déposer un commentaire (6) | Signaler un problème