Salut Africa,
Voici ci-dessous une petite base de script pour générer une pagination en PHP, basé sur le résultat d'une requête SQL.
Générer une pagination n'est pas difficile, il y a quelques principes mathématiques simples à comprendre, mais j'ai allégrement commenté tout ça pour que tu puisses comprendre les étapes et les calculs.
Presque tout se base sur la première variable $itemsPerPage (= le nombre d'items que tu veux afficher sur une page) ainsi que sur $pagesTotal, qui divise le nombre d'enregistrements par le nombre d'items par page. La
fonction ceil() est essentielle, car elle arrondit le résultat de la division.
Bien évidement, ce code est une base à adapter et à sécuriser (surtout quand on travaille avec $_GET)
Il y a deux grandes parties dans le code, la première "Côté PHP", qui s'occupe d'aller chercher les enregistrements dans la base de données,
Et la seconde partie "Côté HTML" qui générera les liens.
Ça devrait ensuite te générer une petite pagination comme ceci :
Bonne journée
<?php
/* Côté PHP */
// Nombre d'items à afficher par pages :
$itemsPerPage = 12;
// Votre requête SQL :
$itemsTotalRecords = $db->query('SELECT id FROM table');
// On compte le nombre d'enregistrements :
$itemsTotal = $itemsTotalRecords->rowCount();
// Puis on divise le nombre total d'items par le nombre d'item par page
// (ceil permet d'arrondir le résultat) :
$pagesTotal = ceil($itemsTotal / $itemsPerPage);
// Maintenant, on doit déterminer les items à sélectionner,
// selon sur quelle page nous nous trouvons :
$condition1 = ( isset($_GET['page']) && !empty($_GET['page']) );
$condition2 = ( $_GET['page'] > 0 && $_GET['page'] <= $pagesTotal );
// Si $_GET['page'] existe, qu'il n'est pas vide et que sa valeur est entre 1 et $pagesTotal :
if ($condition1 && $condition2) {
$currentPage = intval($_GET['page']);
} else {
// Sinon, on renvoie à la page 1 :
$currentPage = 1;
}
// On va maintenant pouvoir effectuer une requête SQL pour
// sélectionner les 12 items à afficher sur la page actuelle :
$start = ( $currentPage - 1 ) * $itemsPerPage;
$req = $db->query('SELECT * FROM table ORDER BY id ASC LIMIT '.$start.','.$itemsPerPage); // Exemple pour comprendre le principe, à adapter !
/* Côté affichage HTML : générer les liens de la pagination */
// Containers HTML :
$html = '<h2 class="screen-reader-text">Navigation</h2>';
$html .= '<nav class="navigation pagination">';
$html .= '<div class="nav-links">';
// Lien vers Précédent :
if ( $currentPage > 1 ) {
$href = '/maPage.php?page='.$currentPage - 1;
$html .= '<a class="prev page-numbers" href="'.$href.'">← Précédent</a>';
}
// On parcours ensuite toutes les pages pour générer les liens :
for ( $i = 1; $i <= $pagesTotal ; $i++) {
$condition = ( ($currentPage - 2) < $i && $i < ($currentPage + 2 ) );
if ($i == 1 || $condition || $i == $pagesTotal) {
// S'il y a plus de 3 pages précédentes à afficher,
// on affichera alors "..." :
if ( $i == $pagesTotal && $currentPage < ($pagesTotal - 3)) {
$html .= '<span class="dots page-numbers">...</span>';
}
// Si $i est la page actuelle :
if ( $i == $currentPage ) {
$html .= '<span class="current page-numbers">'.$i.'</span>';
} else {
// Sinon, c'est une autre page :
$href = '/maPage.php?page='.$i;
$html .= '<a class="page-numbers" href="'.$href.'">'.$i.'</a>';
}
// S'il y a plus de 3 pages suivantes à afficher,
// on affichera alors "..." :
if ( $i == 1 && $currentPage > 3 ) {
$html .= '<span class="dots page-numbers">...</span>';
}
}
}
// Lien vers Suivant :
if ($currentPage < $pagesTotal) {
$href = '/maPage.php?page='.$currentPage + 1;
$html .= '<a class="next page-numbers" href="'.$href.'">Suivant →</a>';
}
// On ferme les containers HTML :
$html .= '</div></nav>';
// Puis on affiche le tout :
echo $html;
Modifié par Loraga (27 Mar 2021 - 13:07)