Facebook
Télécharger
Noter:

Ajouté le 2023-01-13
Visionné 5220 fois
5/5 (2)

Pagination simple en PHP

Description

Système de pagination très simple (un peu casse tête quand même !), vous pouvez afficher des points de suspensions quand il y a beaucoup de pages et gérer ne nombre de résultats par page.

function pagination($NbrDePages, $PageActuelle, $FormatUrlPage = '?page=[page]', $NbrDeLien = 2){

//la pagination que renverra la fonction
$retour = '';

//si il y a plus d'une page, on affiche la pagination
if($NbrDePages > 1){

$retour .= "<div class='C2pagination'><b>Pages:</b> ";
/*
$NbrDePages:

le total de vos pages


$PageActuelle:

la page actuelle que le visiteur parcours


$FormatUrlPage: par défaut: "?page=[page]"

l'url de la page où il y a la pagination, exemple: https://www.c2script.com/ma-liste.php?page=[page] (où "[page]" sera remplacé automatiquement par les numéros de pages disponibles)

si jamais vous utilisez htaccess pour réécrire vos pages, vous pouvez très bien faire comme suit: https://www.c2script.com/ma-liste/[page] ou même https://www.c2script.com/[page]/ma-liste


$NbrDeLien: par défaut 3

(2 Minimum car il y a plus rien qui s'affiche sinon) si 2 (par exemple), il y aura 1 2 ... 15 16 17 ... 23 24 (La page actuelle étant 16), autre exemple avec 3 liens: 1 2 3 ... 14 15 16 17 18 ... 22 23 24 (Avec la page 16 comme actuelle)
*/


//on fait un boucle de toutes les pages
for($page = 1; $page <= $NbrDePages; $page ++){

//on transforme l'url suivant le format voulu
$href = str_replace("[page]", $page, $FormatUrlPage);

//on affiche les premiers liens avant le premier "..."
if($page <= $NbrDeLien){

$retour .= "<a class='C2page" . ($page == $PageActuelle ? '_actuelle' : '') . "' href='{$href}'>{$page}</a>";

}elseif(($page-$NbrDeLien) > $PageActuelle OR $page == $PageActuelle OR ($page + $NbrDeLien) > $PageActuelle){

if(($page - $NbrDeLien + 1) > $PageActuelle AND $page > $PageActuelle){

$retour .= (!isset($EtcFin) AND (($PageActuelle + $NbrDeLien) != $NbrDePages) AND ($PageActuelle + $NbrDeLien * 2) <= $NbrDePages) ? '<span class="C2page_etc">...</span>' : '';

//on évite d'afficher plusieurs fois le "..." de la fin
$EtcFin = true;

$retour .= ($page == $NbrDePages OR ($page + $NbrDeLien) > $NbrDePages) ? "<a class='C2page" . ($page == $PageActuelle ? '_actuelle' : '') . "' href='{$href}'>{$page}</a>" : "";

}else{
$retour .= "<a class='C2page" . ($page == $PageActuelle ? '_actuelle' : '') . "' href='{$href}'>{$page}</a>";

$EtcDebut = false;

}

//si le "..." du début n'a pas été affiché, on l'affiche
}elseif(!isset($EtcDebut)){

$EtcDebut = true;// on évite d'afficher plusieurs fois le "..." du début
$retour .= '<span class="C2page_etc">...</span>';

}
}
$retour .= "</div>";
}
return $retour;
}
//CONFIGURATION
$ResultatsParPage = 4;//le nombre de résultats qui seront affichés par page
$TableMysql='nom_table';//la table dans laquelle il va rechercher les résultats
$ColonneMysql='id';//la colonne dans laquelle il va rechercher les résultats
$OrdreMysql='ASC';//ASC pour ascendant (croissant: 1,2,3,...) DESC pour descendant (décroissant: ...3,2,1)

//SCRIPT:
$req=mysqli_query($mysqli,"SELECT * FROM $TableMysql");
$nombreDePages=ceil(mysqli_num_rows($req)/$ResultatsParPage);
//par défaut, on affiche la page 1
$pageActuelle=1;
//si une page est demandé, on vérifie a ce que GET soit correct
//GET ou POST page suivant ce que vous utilisez
if(isset($_GET['page'])){
// si get est un chiffre:
if(preg_match("#^[0-9]+$#",$_GET['page'])){
$pageActuelle = intval($_GET['page']);//intval enlève le zéro de devant si il y en a un
if($pageActuelle>$nombreDePages)$pageActuelle=$nombreDePages;//si on demande une page supérieur au maxinimum de pages, on affiche la page maximale
}
}
//on calcul la première entrée à lire
$premiereEntree = ($pageActuelle-1)*$ResultatsParPage;
$req=mysqli_query($mysqli,"SELECT * FROM $TableMysql ORDER BY $ColonneMysql $OrdreMysql LIMIT $premiereEntree, $ResultatsParPage");
//FIN SCRIPT

//AFFICHAGE DES RESULTATS ET DE NOTRE PAGINATION
//exemple pour afficher les résultats de la BDD:
while($info=mysqli_fetch_assoc($req)){
echo $info['id'].'<br/>';
}
//on affiche la pagination
echo pagination($nombreDePages,$pageActuelle);
//avec les paramètres optionnels:
pagination($nombreDePages,$pageActuelle,"/url-style-[page]");
//ou
pagination($nombreDePages,$pageActuelle,"/url/[page]/style",3);
//...
div.C2pagination{background:#583ce1;padding:5px;text-align:center;color:white}
div.C2pagination a{padding:3px;margin:2px}
a.C2page_actuelle{background:#fff;border:1px solid #fff}
a.C2page{background:#eee;border:1px solid #583ce1}
a.C2page:hover{background:#fff;border:1px solid #fff}
span.C2page_etc{padding:3px;margin:2px}



Besoin de travaux pour votre site ?

Je suis disponible, contactez-moi !

Commentaires

Ajouter un commentaire

Commenter
Pseudo/Nom
Email
Message
Captcha

Captcha temporairement HS, tapez 2 svp
memo2
Commenter

dudo le 24 Septembre 2015 à 14:45

Merci beaucoup pour ce script très pratique !

Retour à la liste des scripts