Télécharger
Noter:

Ajouté le 23/02/2015
Visionné 3452 fois
5/5

Pagination simple en PHP

Description

Mise à jour: 01/04/2020
Ce système de page (pagination) est léger, vous pouvez gérer ne nombre de résultats par page et il affiche des points de suspensions quand il y a beaucoup de pages

function pagination($NbrDePages,$PageActuelle,$FormatUrlPage="?page=[page]",$NbrDeLien=2){
//si il y a plus d'une page, on affiche la pagination
if($NbrDePages>1){
echo "<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
$href=str_replace("[page]",$page,$FormatUrlPage);
//on affiche les premiers liens avant le premier "..."
if($page<=$NbrDeLien){
echo "<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){
echo (!isset($EtcFin) AND (($PageActuelle+$NbrDeLien)!=$NbrDePages) AND ($PageActuelle+$NbrDeLien*2)<=$NbrDePages)?'<span class="C2page_etc">...</span>':'';
$EtcFin=true;// on évite d'afficher plusieurs fois le "..." de la fin
echo ($page==$NbrDePages OR ($page+$NbrDeLien)>$NbrDePages)?"<a class='C2page".($page==$PageActuelle?'_actuelle':'')."' href='{$href}'>{$page}</a>":"";
} else {
echo "<a class='C2page".($page==$PageActuelle?'_actuelle':'')."' href='{$href}'>{$page}</a>";
$EtcDebut=false;
}
} elseif(!isset($EtcDebut)) {// si le "..." du début n'a pas été affiché, on l'affiche
$EtcDebut = true;// on évite d'afficher plusieurs fois le "..." du début
echo '<span class="C2page_etc">...</span>';
}
}
echo "</div>";
}
}


//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
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}

Commentaires

dudo le 24 Septembre 2015 à 14:45

Merci beaucoup pour ce script très pratique !

Ajouter un commentaire

Pseudo/Nom *
Email *
Message *
La balise [code]Votre code...[/code] peut être utilisée

Captcha * memo1memo2

Les champs marqués d'un * sont obligatoires.

Retour à la liste des scripts

Flag Counter