Steve TENZA
Intervient pour votre site internet
Facebook Me contacter Cookie
Télécharger
Noter:
4.3/5 (6)
Ajouté/Modifié le 2023-11-02
Visionné 6729 fois

Pagination simple en PHP

Description

Mettre en place un système de rédaction de pages, bien que relativement simple dans son concept, peut parfois s'avérer un peu difficile en pratique. Il s'agit d'un outil important pour visualiser les résultats affichés sur une page Web, en particulier lorsque l'ensemble de données est volumineux. Ce système offre une solution élégante pour éviter de surcharger une page avec trop de résultats.

L'un des avantages clés de cette approche est la capacité à gérer le nombre de résultats affichés par page. De plus, lorsque le nombre de pages à rechercher est important, la mise en page est conçue pour afficher des points de suspension, simplifiant ainsi la lisibilité.

En fin de compte, cette mise en page contribue à améliorer l’expérience utilisateur en fournissant un moyen efficace de rechercher et de trouver des informations. Cette fonctionnalité est particulièrement utile pour fournir des types de données, tels que des listes de produits, des articles de blog ou des résultats de recherche.

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}


J'espère que ce script gratuit vous est utile.
Pour soutenir mon travail, un simple don ou mettre une note est grandement apprécié.
Votre réussite en ligne commence ici

Vous cherchez à pousser encore plus loin vos idées ou à les concrétiser avec un site internet sur mesure ? Je suis là pour vous aider ! Mon expérience en développement web est à votre disposition.

Que ce soit la création de votre site web pro ou l'apport de fonctionnalités avancées à votre projet, contactez-moi pour en discuter et avoir un devis gratuit personnalisé.

Mon objectif est de vous offrir des solutions sur mesure qui répondent à vos besoins, et votre vision associée à mon expertise donnera vie à votre projet web parfait. Contactez-moi aujourd'hui, je réponds en général en moins d'une heure :

Demander un devis
Réponse rapide !

Vous recherchez un script précis ?

Dites-moi ce dont vous avez besoin, je peux développer le script demandé et vous envoyer un mail dès qu'il est dispo !

🔔 Vous pouvez laisser votre mail pour recevoir les nouveaux scripts. Pas de pub, pas de tracas. Vous êtes libre de le supprimer à tout moment.

Je prends en compte toutes les demandes. Les idées les plus populaires passent en priorité et seront publiées dès qu'elles seront prêtes. 2873 demandes reçues.

Si vous avez un projet en tête, je vous suggère de me contacter directement pour en discuter.

Commentaires

Ajouter un commentaire

Commenter
Pseudo/Nom
Email
Message
Captcha
memo2
Commenter

dudo le 24 Septembre 2015 à 14:45

Merci beaucoup pour ce script très pratique !

Retour à la liste des scripts

Un site à créer ?
Contactez-moi