PHP - Pagination

Décembre 2016




Présentation


Cette fonction permet de créer une pagination. Elle ne fait pas qu'afficher bêtement la liste des liens mais il est possible de mettre une limitation du nombre de liens avant et après la page actuelle.
.

La fonction


<?php
/* Options de connexion à MySQL */
define('DB_HOST', 'localhost'); // Hôte du serveur MySQL
define('DB_NAME', 'la_base'); // Nom de la base de données
define('DB_USER', 'root'); // Nom d'utilisateur MySQL
define('DB_PASS', ''); // Mot de passe du compte MySQL

/* Options pour la pagination */
define('PAGINA_LIMIT', 5); // Limite de liens avant et après la page actuelle
define('PAGINA_CLASS', 'page'); // Classe des liens "normaux"
define('PAGINA_CURRENT_CLASS', 'active'); // Classe du lien de le page actuelle
define('PAGINA_NEXTLINK_CLASS', 'next'); // Classe du lien "Suivant"
define('PAGINA_PREVIOUSLINK_CLASS', 'previous'); // Classe du lien "Précédent"
define('PAGINA_PERPAGE', 7); // Nombre d'éléments par page
define('PAGINA_LINK', '/teste2.php?page={nb}'); // Structure des liens générés



/* Définition de la fonction getLink()
. Paramètre :
. @page Int : Page
.*/
function getLink($nb) {
return str_replace('{nb}', (string) $nb, PAGINA_LINK);
}



/* Définition de la fonction pagination()
. Paramètres :
. @table String : Nom de le table
. @current Int : Page actuelle
.*/
function pagination($table, $current = 1) {
echo '<ul class="pagination">';

/* On compte le nombre d'entrées dans la table et le nombre de page */
try {
$pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS);
} catch(PDOException $e) {
echo 'Erreur lors de la connexion au serveur MySQL.<br/>'.$e->getMessage();
return;
}

$sql = 'SELECT COUNT(*) AS nb FROM '.$table;
$req = $pdo->query($sql);
$data = $req->fetch();
$nb = $data['nb'];

$nbPage = ceil($nb / PAGINA_PERPAGE);


/* Afficher le lien "Précédent" si la page actuelle n'est pas la première */
if($current !== 1) {
echo '<li><a href="'.getLink($current - 1).'" class="'.PAGINA_PREVIOUSLINK_CLASS.'">Précédent</a></li>';
}

/* Afficher les liens avant la page actuelle */
for($i = ($current - PAGINA_LIMIT) ; $i < $current ; $i++) {
if($i > 0) {
echo '<li><a href="'.getLink($i).'" class="'.PAGINA_CLASS.'">'.$i.'</a></li>';
}
}

/* Afficher le lien de la page actuelle */
echo '<li><a href="'.getLink($current).'" class="'.PAGINA_CURRENT_CLASS.'">'.$current.'</a></li>';

/* Afficher les liens suivants */
$nb = 0;
for($i = ($current + 1) ; $i <= $nbPage ; $i++) {
if($nb < PAGINA_LIMIT) {
echo '<li><a href="'.getLink($i).'" class="'.PAGINA_CLASS.'">'.$i.'</a></li>';
$nb++;
}
}

/* Afficher le lien "Suivant" si la page actuelle n'est pas la dernière */
if($current < $nbPage) {
echo '<li><a href="'.getLink($current + 1).'" class="'.PAGINA_NEXTLINK_CLASS.'">Suivant</a></li>';
}

echo '</ul>';
}

if(isset($_GET['page']) && (int) $_GET['page'] !== 0) {
$page = (int) $_GET['page'];
} else {
$page = 1;
}

pagination('la_table', $page);
?>

Style CSS


.pagination {
margin: 0px;
list-style: none;
padding: 0px;
}

.pagination li {
float:left;
}

.pagination li a {
border: solid 1px black;
color: black;
padding-left: 4px;
padding-right: 4px;
margin-left: 3px;
margin-right: 3px;
text-decoration: none;
}

.pagination li a.active {
border-color: red;
}

.pagination li a.next, .pagination li a.previous {

}

.pagination li a.page {

}

A voir également :

Ce document intitulé «  PHP - Pagination  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.