Comment paginer des données avec PHP

Je me souviens de l'époque où j'ai commencé à coder en PHP et MySQL il y a des années. J'étais enthousiaste à l'idée de recevoir pour la première fois des informations d'une base de données dans un navigateur Web.. 

Pour ceux qui possédaient peu de connaissances en matière de base de données et de programmation, le fait de voir ces rangées de tableaux s'afficher à l'écran en fonction du code que j'avais écrit (d'accord, j'ai donc copié un exemple tiré d'un livre - ne nous coupons pas les cheveux en quatre) m'a procuré un high triomphant. Je n’avais peut-être pas encore compris toute la magie du travail à l’époque, mais ce premier succès m’a incité à entreprendre de plus grands projets..

Bien que mon niveau d’exubérance vis-à-vis des bases de données ne soit pas le même qu’il était autrefois,
depuis ma première rencontre avec PHP et MySQL, «Hello World», je suis devenu accro
sur le pouvoir de rendre les choses simples et faciles à utiliser. 

En tant que développeur, je suis constamment confronté à un problème: prendre un grand nombre d'informations et le rendre facile à digérer. Qu'il s'agisse d'une liste de clients d'une grande entreprise ou d'un catalogue MP3 personnel, il peut être décourageant de s'asseoir et de regarder des lignes sur des lignes sur des lignes de données.
et frustrant. Que peut faire un bon développeur? Paginer!

À la recherche d'une solution rapide?

Si vous cherchez une solution rapide, il existe une grande collection de scripts de pagination et d’aides sur Envato Market.. 

Cette classe de pagination PHP est vraiment utile. Il peut être implémenté avec n’importe quel moteur de base de données pris en charge par PHP, il est très facile à personnaliser et à implémenter, prend en charge deux écrans par défaut, possède des schémas de conception multicolores, etc..


1. Pagination

La pagination est essentiellement le processus consistant à prendre un ensemble de résultats et à se répandre.
les sur des pages pour les rendre plus faciles à voir.

J'ai réalisé très tôt que si j'avais 5000 rangées d'informations à afficher non seulement
serait-ce un mal de tête pour quelqu'un d'essayer de lire, mais la plupart des navigateurs prendraient
une éternité Internet (c'est-à-dire plus de cinq secondes environ) pour l'afficher. 

Pour résoudre ce problème, je coderais diverses instructions SQL afin d’extraire des blocs de données, et si j’étais
de bonne humeur, je pourrais même ajouter quelques boutons "Suivant" et "Précédent".
Après un certain temps, il faut déposer ce code dans chaque projet similaire et personnaliser
pour s'adapter vieilli. Vite. Et comme tout bon développeur le sait, la paresse engendre l'inventivité
ou quelque chose comme ça. Alors un jour, je me suis assis et j'ai décidé de créer un simple,
classe PHP flexible et facile à utiliser qui ferait automatiquement le sale boulot pour
moi.

Un mot rapide sur moi et les cours PHP. Je ne suis pas un whiz orienté objet. En fait, je peine
jamais utiliser les trucs. Mais après avoir lu quelques exemples de POO et des tutoriels, et quelques
De simples exemples d’essais et d’erreur, j’ai décidé de l’analyser et vous savez quoi?
Cela fonctionne parfaitement pour la pagination. Le code utilisé ici est écrit en PHP 4 mais sera
travailler en PHP 5.


2. La base de données

Je dois aimer MySQL. Aucune infraction aux autres systèmes de base de données là-bas, mais pour
moi, tout ce dont j'ai besoin, c'est MySQL. Et une grande fonctionnalité de MySQL est qu’ils vous en donnent
exemples de bases de données gratuits à utiliser à l'adresse http://dev.mysql.com/doc/#sampledb.

Pour mes exemples, je vais utiliser la base de données mondiale (~ 90k compressée) qui contient plus de
4000 enregistrements pour jouer, mais la beauté du script PHP que nous allons créer est
qu'il peut être utilisé avec n'importe quelle base de données. Maintenant, je pense que nous pouvons tous convenir que si nous décidions
ne pas paginer nos résultats que nous nous retrouverions avec une très longue et difficile à manier
résultats comme ceux-ci:

(cliquez pour agrandir, image ridiculement longue ~ 338k)

Alors, commençons à décomposer nos données en fichiers faciles à digérer comme ceci:

Beau n'est-ce pas? Une fois que vous déposez la classe de pagination dans votre code, vous pouvez
transformer rapidement et facilement un vaste ensemble de données en pages faciles à naviguer avec
juste quelques lignes de code. Vraiment.


3. Paginateur

Cet exemple sera composé de deux scripts, la classe de pagination réutilisable et le fichier d'index qui affichera les éléments de la table et les contrôles..

Paginator.class.php

La classe de pagination n'aura que deux méthodes et le constructeur, nous le construirons progressivement en expliquant chaque étape à mesure que nous avancons.

 

Cette définition ne définit que les variables de membre obligatoires de la pagination, puisqu'il s'agit d'une classe d'assistance et qu'elle est destinée à la pagination uniquement. Elle repose sur une connexion valide au serveur MySQL et une requête déjà définie à laquelle nous ajouterons les paramètres nécessaires à la pagination des résultats. Nous allons commencer par la méthode constructeur.

_conn = $ conn; $ this -> _ query = $ query; $ rs = $ this -> _ conn-> query ($ this -> _ query); $ this -> _ total = $ rs-> num_rows;  

Assez simple non? Cette méthode définit uniquement la connexion à la base de données de l'objet et la requête nécessaire. Après avoir calculé le nombre total de lignes extraites par cette requête, sans limite ni paramètres ignorés, ce total est nécessaire pour créer les liens du paginateur..

Notez que par souci de simplicité, nous ne faisons pas de vérification d'erreur ni de validation des paramètres donnés, mais dans une application réelle, cette vérification sera nécessaire..

Récupération des résultats

Créons maintenant la méthode qui paginera les données et renverra les résultats.

_limit = $ limit; $ this -> _ page = $ page; if ($ this -> _ limit == 'all') $ query = $ this -> _ query;  else $ query = $ this -> _ requête. "LIMIT". (($ ceci -> _ page - 1) * $ ceci -> _ limite). ", $ this -> _ limit";  $ rs = $ this -> _ conn-> query ($ query); while ($ rangée = $ rs-> fetch_assoc ()) $ résultats [] = $ rangée;  $ resultat = new stdClass (); $ result-> page = $ this -> _ page; $ résultat-> limite = $ ceci -> _ limite; $ résultat-> total = $ ceci -> _ total; $ résultat-> data = $ résultats; return $ result;  

Analysons cette étape à la fois. Nous définissons d’abord les paramètres de limite et de page, qui sont réglés par défaut à 10 et 1 respectivement. Ensuite, nous vérifions si l’utilisateur a besoin d’un nombre donné de lignes ou de la totalité d’entre elles, en nous basant sur ceci et sur le paramètre de page que nous avons défini. LIMITE paramètre de la requête, le "- 1" de la page prend en compte le fait que nous démarrons les pages en 1 au lieu de 0.

Après cela, nous évaluons simplement la requête et obtenons les résultats. Enfin, nous créons un nouvel objet de résultat contenant les paramètres de limite, de page et de total de la requête exécutée, ainsi que les données de chacune des lignes extraites..

Affichage des liens de pagination

Maintenant, écrivons la méthode utilisée pour obtenir les liens de pagination.

_limit == 'all') return "; $ last = ceil ($ this -> _ total / $ this -> _ limite); $ start = (($ this -> _ page - $ liens)> 0)? $ this -> _ page - $ links: 1; $ end = (($ this -> _ page + $ links) < $last ) ? $this->_page + $ links: $ last; $ html = '
    '; $ class = ($ this -> _ page == 1)? "désactivée" : ""; $ html. = '
  • _limite. '& page ='. ($ this -> _ page - 1). '">«
  • '; if ($ start> 1) $ html. = '
  • _limite. '& page = 1 "> 1
  • '; $ html. = '
  • '; pour ($ i = $ start; $ i <= $end; $i++ ) $class = ( $this->_page == $ i)? "actif" : ""; $ html. = '
  • _limite. '& page ='. $ i. '">'. $ i. '
  • '; if ($ end < $last ) $html .= '
  • '; $ html. = '
  • _limite. '& page ='. $ dernier. '">'. $ last. '
  • '; $ class = ($ this -> _ page == $ last)? "désactivée" : ""; $ html. = '
  • _limite. '& page ='. ($ this -> _ page + 1). '">»
  • '; $ html. = '
'; return $ html;

Ceci est une méthode assez longue, quelque chose comme 34 lignes de code, expliquons maintenant ce qui se passe dans cette méthode.

  1. Tout d'abord, nous évaluons si l'utilisateur requiert un nombre donné de liens ou tous les liens. Dans le second cas, nous renvoyons simplement une chaîne vide, car aucune pagination n'est requise..
  2. Ensuite, nous calculons la dernière page en fonction du nombre total de lignes disponibles et des éléments requis par page..
  3. Ensuite, prenons le paramètre links qui représente le nombre de liens à afficher en dessous et au dessus de la page en cours, et calculons les liens de début et de fin pour créer.
  4. Maintenant, nous créons la balise d'ouverture pour la liste et définissons sa classe avec le paramètre list class et ajoutons le lien "page précédente". Notez que pour ce lien, nous vérifions si la page en cours est la première, et si oui, nous définissons la propriété désactivée du lien.
  5. À ce stade, nous affichons un lien vers la première page et un symbole représentant des points de suspension au cas où le lien de début ne serait pas le premier..
  6. Ensuite, nous ajoutons les liens situés au-dessous et au-dessus de la page en cours en fonction des paramètres de début et de fin calculés précédemment. À chaque étape, nous évaluons à nouveau la page en cours, la page de liens affichée et définissons la classe active en conséquence..
  7. Après cela, nous affichons un autre symbole des points de suspension et le lien vers la dernière page au cas où le lien de fin ne serait pas la dernière..
  8. Enfin, nous affichons le lien "page suivante" et définissons l'état désactivé lorsque l'utilisateur visualise la dernière page, ferme la liste et renvoie la chaîne HTML générée..

C'est tout ce qu'il y a dans Paginator.class, bien sûr, nous pourrions ajouter des paramètres pour la connexion à la base de données, la limite, la page, la requête et le total des paramètres, mais pour des raisons de simplicité, nous allons le garder comme suit.

4. Index.php

Nous allons maintenant créer le fichier responsable de l’utilisation de la classe Paginator et de l’affichage des données; laissez-moi d’abord vous montrer le code HTML de base..

  Pagination PHP    

Pagination PHP

Ville Pays Continent Région

Très simplement, ce fichier affiche uniquement un tableau que nous allons renseigner avec les informations extraites de la base de données. Notez que pour cet exemple, j'utilise bootstrap pour le style de base des pages..

Utiliser le paginateur

Les données ); $ i ++):?>  données [$ i] ['Nom']; ?> données [$ i] ['Pays']; ?> données [$ i] ['Continent']; ?> données [$ i] ['Région']; ?>   

Maintenant, pour utiliser notre classe Paginator, ajoutez le code php suivant en haut du document.

getData ($ page, $ limit); ?>

Ce script est assez simple, nous avons juste besoin de notre classe Paginator, notez que ce code suppose que ce fichier est dans le même répertoire que le index.php fichier, si ce n'est pas le cas, vous devez mettre à jour le chemin en conséquence.

Ensuite, nous créons la connexion à notre base de données à l'aide de la bibliothèque MySQLi, récupérons les paramètres de pagination à partir de la requête GET et définissons la requête, car il ne s'agit ni d'un article sur MySQL ni d'aucun de ces éléments. Je n'entrerai pas dans les détails concernant la connexion ou la requête. utilisé ici.

Enfin, nous créons l'objet Paginator et récupérons les résultats pour la page en cours..

Affichage des résultats

Maintenant, pour afficher les résultats obtenus, ajoutez le code suivant au corps de la table.

Les données ); $ i ++):?>  données [$ i] ['Nom']; ?> données [$ i] ['Pays']; ?> données [$ i] ['Continent']; ?> données [$ i] ['Région']; ?>   

Ici, nous parcourons simplement l'attribut de données de résultats contenant les enregistrements de villes et créons une ligne de tableau pour chacun d'entre eux..

Liens de pagination

Maintenant, pour afficher les liens de pagination, ajoutez le code suivant sous le tableau.

createLinks ($ links, 'pagination pagination-sm'); ?> 

À la méthode createLinks de Paginator, nous passons le résultat obtenu. liens paramètre et la classe css pour les liens de pagination utilisés à partir de bootstrap. Voici le résultat de la page créée.

Conclusion

Cela devrait vous fournir tout ce que vous devez savoir pour pouvoir commencer à paginer dans votre application..

S'il vous plaît n'hésitez pas à laisser des questions, des commentaires ou des commentaires généraux dans le flux ci-dessous!

Toujours coincé? Essayez de contacter l'un de nos développeurs PHP expérimentés sur Envato Studio..