Pagination Web

Publié le par Marie-Ange MALROUX

Le site http://www.phpcs.com propose un code parfait pour paginer vos pages web. Quand je dis parfait, je n'exagère pas : non seulement le code est très bien documenté mais en plus il fonctionne d'un claquement de doigts. Sisi c'est possible !


  • <?
  • //==============================================================================
  • // # PAGINATION AUTOMATIQUE PAR APPEL DE FONCTIONS PHP #
  • //==============================================================================
  • ?>
  • <html>
  • <head>
  • <title>Script de pagination automatique en php</title>
  • <!-- Styles CSS -->
  • <style type="text/css">
  • html {font-size: 1.4em;}
  • .pagination a {color: black;}
  • .pagination a:hover {color: red; text-decoration: none;}
  • .pagination a:visited {color: red; text-decoration: none;}
  • </style>
  • </head>
  • <body>
  • <?
  • //==============================================================================
  • // Configuration à modifier avec vos propres paramètres
  • //==============================================================================
  • // Connexion à la base de données
  • $host = "localhost";
  • $user = "root";
  • $pass = "";
  • $data = "mabase"; // Nommer ici la base de données
  • $connect = mysql_connect($host, $user, $pass)
  • or die("Connexion au serveur impossible !");
  • $db = mysql_select_db($data, $connect)
  • or die("Sélection de la base impossible !");
  • // Paramétrage de la requête (ne pas modifier le nom des variable)
  • $table = "matable"; // Table à sélectionner dans la base
  • $champ = "champtest"; // Champ de la table à afficher pour tester ce script
  • $sql = "SELECT * FROM $table"; // Requête initiale (à compléter si nécessaire)
  • $parpage = 5; // Nombre d'enregistrements par page à afficher
  • //==============================================================================
  • // Déclaration et initialisation des variables (ici ne rien modifier)
  • //==============================================================================
  • // On définit le suffixe du lien url qui affichera les pages
  • // $_SERVEUR['PHP_SELF'] donne l'arborescence de la page courante
  • $url = $_SERVER['PHP_SELF']."?limit=";
  • $total = mysql_query($sql); // Résultat total de la requête $sql
  • $nblignes = mysql_num_rows($total); // Nbre total d'enregistrements
  • // On calcule le nombre de pages à afficher en arrondissant
  • // le résultat au nombre supérieur grâce à la fonction ceil()
  • $nbpages = ceil($nblignes/$parpage);
  • //==============================================================================
  • // Exemple d'affichage HTML
  • //==============================================================================
  • // On teste en affichant la valeur des variables (facultatif)
  • echo "<p>La table <b>".$table."</b> compte ".$nblignes." <b>".$champ."</b>.";
  • echo "<br />n"."On affiche <b>".$parpage." enregistrements</b> par page, ";
  • echo "soit un total de <b>".$nbpages." pages</b>.</p>n";
  • // Si une valeur 'limit' est passée par url, on vérifie la validité de
  • // cette valeur par mesure de sécurité avec la fonction validlimit()
  • // cette fonction retourne automatiquement le résultat de la requête
  • $result = validlimit($nblignes,$parpage,$sql);
  • // On affiche le résultat de la requête
  • // On crée donc ici son propre tableau pour lequel on souhaite une pagination
  • while ($ligne = mysql_fetch_array($result)) {
  • echo $ligne[$champ]."<br />n";
  • }
  • // Menu de pagination que l'on place après la requête
  • echo "<div class='pagination'>";
  • echo pagination($url,$parpage,$nblignes,$nbpages);
  • echo "</div>";
  • mysql_free_result($result); // Libère le résultat de la mémoire
  • //==============================================================================
  • // Fonctions à copier de préférence dans un fichier 'include/fonctions.inc.php'
  • //==============================================================================
  • function pagination($url,$parpage,$nblignes,$nbpages)
  • {
  • // On crée le code html pour la pagination
  • $html = precedent($url,$parpage,$nblignes); // On crée le lien precedent
  • // On vérifie que l'on a plus d'une page à afficher
  • if ($nbpages > 1) {
  • // On boucle sur les numéros de pages à afficher
  • for ($i = 0 ; $i < $nbpages ; ++$i) {
  • $limit = $i * $parpage; // On calcule le début de la valeur 'limit'
  • $limit = $limit.",".$parpage; // On fait une concaténation avec $parpage
  • // On affiche les liens des numéros de pages
  • $html .= "<a href=".$url.$limit.">".($i + 1)."</a> | " ;
  • }
  • }
  • // Si l'on a qu'une page on affiche rien
  • else {
  • $html .= "";
  • }
  • $html .= suivant($url,$parpage,$nblignes); // On crée le lien suivant
  • // On retourne le code html
  • return $html;
  • }
  • function validlimit($nblignes,$parpage,$sql)
  • {
  • // On vérifie l'existence de la variable $_GET['limit']
  • // $limit correspond à la clause LIMIT que l'on ajoute à la requête $sql
  • if (isset($_GET['limit'])) {
  • $pointer = split('[,]', $_GET['limit']); // On scinde $_GET['limit'] en 2
  • $debut = $pointer[0];
  • $fin = $pointer[1];
  • // On vérifie la conformité de la variable $_GET['limit']
  • if (($debut >= 0) && ($debut < $nblignes) && ($fin == $parpage)) {
  • // Si $_GET['limit'] est valide on lance la requête pour afficher la page
  • $limit = $_GET['limit']; // On récupère la valeur 'limit' passée par url
  • $sql .= " LIMIT ".$limit.";"; // On ajoute $limit à la requête $sql
  • $result = mysql_query($sql); // Nouveau résultat de la requête
  • }
  • // Sinon on affiche la première page
  • else {
  • $sql .= " LIMIT 0,".$parpage.";"; // On ajoute la valeur LIMIT à la requête
  • $result = mysql_query($sql); // Nouveau résultat de la requête
  • }
  • }
  • // Si la valeur 'limit' n'est pas connue, on affiche la première page
  • else {
  • $sql .= " LIMIT 0,".$parpage.";"; // On ajoute la valeur LIMIT à la requête
  • $result = mysql_query($sql); // Nouveau résultat de la requête
  • }
  • // On retourne le résultat de la requête
  • return $result;
  • }
  • function precedent($url,$parpage,$nblignes)
  • {
  • // On vérifie qu'il y a au moins 2 pages à afficher
  • if ($nblignes > $parpage) {
  • // On vérifie l'existence de la variable $_GET['limit']
  • if (isset($_GET['limit'])) {
  • // On scinde la variable 'limit' en utilisant la virgule comme séparateur
  • $pointer = split('[,]', $_GET['limit']);
  • // On récupère le nombre avant la virgule et on soustrait la valeur $parpage
  • $pointer = $pointer[0]-$parpage;
  • // Si on atteint la première page, pas besoin de lien 'Précédent'
  • if ($pointer < 0) {
  • $precedent = "";
  • }
  • // Sinon on affiche le lien avec l'url de la page précédente
  • else {
  • $limit = "$pointer,$parpage";
  • $precedent = "<a href=".$url.$limit."><</a> | ";
  • }
  • }
  • else {
  • $precedent = ""; // On est à la première page, pas besoin de lien 'Précédent'
  • }
  • }
  • else {
  • $precedent = ""; // On a qu'une page, pas besoin de lien 'Précédent'
  • }
  • return $precedent;
  • }
  • function suivant($url,$parpage,$nblignes)
  • {
  • // On vérifie qu'il y a au moins 2 pages à afficher
  • if ($nblignes > $parpage) {
  • // On vérifie l'existence de la variable $_GET['limit']
  • if (isset($_GET['limit'])) {
  • // On scinde la variable 'limit' en utilisant la virgule comme séparateur
  • $pointer = split('[,]', $_GET['limit']);
  • // On récupère le nombre avant la virgule auquel on ajoute la valeur $parpage
  • $pointer = $pointer[0] + $parpage;
  • // Si on atteint la dernière page, pas besoin de lien 'Suivant'
  • if ($pointer >= $nblignes) {
  • $suivant = "";
  • }
  • // Sinon on affiche le lien avec l'url de la page suivante
  • else {
  • $limit = "$pointer,$parpage";
  • $suivant = "<a class='pagination' href=".$url.$limit.">></a>";
  • }
  • }
  • // Si pas de valeur 'limit' on affiche le lien de la deuxième page
  • if (@$_GET['limit']== false) {
  • $suivant = "<a href=".$url.$parpage.",".$parpage.">></a>";
  • }
  • }
  • else {
  • $suivant = ""; // On a qu'une page, pas besoin de lien 'Suivant'
  • }
  • return $suivant;
  • }
  • // Fin du script
  • ?>
  • </body>
  • </html>
Source : http://www.phpcs.com/codes/PAGINATION-AUTOMATIQUE-APPEL-FONCTIONS-PHP_39392.aspx

Publié dans PHP

Commenter cet article