Maison  >  Article  >  développement back-end  >  Exemple de code de classe de pagination implémentée en php

Exemple de code de classe de pagination implémentée en php

怪我咯
怪我咯original
2017-07-14 09:22:121232parcourir

L'affichage de pagination est une méthode très courante de navigation et d'affichage de grandes quantités de données, et est l'un des événements les plus couramment traités dans la programmation Web. Pour les vétérans de la programmation Web, écrire ce type de code est aussi naturel que respirer, mais pour les débutants, ils sont souvent confus quant à ce problème, j'ai donc écrit cet article pour expliquer ce problème en détail.

1. Principe de pagination :
L'affichage dit de pagination consiste à diviser artificiellement l'ensemble de résultats dans la base de données en sections pour l'affichage :

Chacun combien. les enregistrements sont dans la page ($PageSize) ?
Quelle page est la page actuelle ($CurrentPageID) ?

Maintenant, donnez-moi simplement un autre ensemble de résultats, et je pourrai afficher un résultat spécifique.

Quant aux autres paramètres, tels que : la page précédente ($PReviousPageID), la page suivante ($NextPageID), le nombre total de pages ($numPages), etc., ils peuvent être obtenus en fonction des éléments précédents.

En prenant la base de données MySQL comme exemple, si vous souhaitez intercepter un certain élément de contenu de la table, l'instruction sql peut être utilisée : select * from table limit offset, rows. Jetez un œil à l’ensemble d’instructions SQL suivant et essayez de trouver les règles.

Les 10 premiers enregistrements : sélectionnez * dans la limite de la table 0,10
Du 11ème au 20ème enregistrements : sélectionnez * dans la limite de la table 10,10
Du 21ème au 30ème enregistrements : sélectionnez * dans la limite de la table 20,10
......
Cet ensemble d'instructions SQL est en fait l'instruction SQL permettant de récupérer les données de chaque page du tableau lorsque $PageSize=10. Nous pouvons résumer un tel modèle :
. select * from table limit ($CurrentPageID - 1) * $PageSize, $PageSize
Utilisez ce modèle pour remplacer la valeur correspondante et comparez-la avec l'ensemble d'instructions SQL ci-dessus pour voir si tel est le cas. Après avoir résolu le problème le plus important de la façon d'obtenir les données, il ne reste plus qu'à transmettre les paramètres, construire l'instruction SQL appropriée, puis utiliser PHP pour obtenir les données de la base de données et les afficher.

Cet article présente principalement la classe de pagination implémentée par PHP. Il analyse les opérations courantes et les techniques d'utilisation spécifiques de la classe de pagination encapsulée en PHP sur la base d'exemples spécifiques auxquels les amis dans le besoin peuvent se référer. il, plus précisément comme suit :

<?php
  class Page {
     private $total;   //总记录
     private $pagesize;  //每页显示多少条
     private $limit;     //limit
     private $page;      //当前页码
     private $pagenum;   //总页码
     private $url;      //地址
     private $bothnum;   //两边保持数字分页的量
   //构造方法初始化
   public function construct($_total, $_pagesize) {
     $this->total = $_total ? $_total : 1;
     $this->pagesize = $_pagesize;
     $this->pagenum = ceil($this->total / $this->pagesize);
     $this->page = $this->setPage();
     $this->limit = "LIMIT ".($this->page-1)*$this->pagesize.",$this->pagesize";
     $this->url = $this->setUrl();
     $this->bothnum = 2;
   }
   //拦截器
   private function get($_key) {
     return $this->$_key;
   }
   //获取当前页码
   private function setPage() {
     if (!empty($_GET[&#39;page&#39;])) {
        if ($_GET[&#39;page&#39;] > 0) {
          if ($_GET[&#39;page&#39;] > $this->pagenum) {
             return $this->pagenum;
          } else {
             return $_GET[&#39;page&#39;];
          }
        } else {
          return 1;
        }
     } else {
        return 1;
     }
   }
   //获取地址
   private function setUrl() {
     $_url = $_SERVER["REQUEST_URI"];
     $_par = parse_url($_url);
     if (isset($_par[&#39;query&#39;])) {
        parse_str($_par[&#39;query&#39;],$_query);
        unset($_query[&#39;page&#39;]);
        $_url = $_par[&#39;path&#39;].&#39;?&#39;.http_build_query($_query);
     }
     return $_url;
   }   //数字目录
   private function pageList() {
     for ($i=$this->bothnum;$i>=1;$i--) {
      $_page = $this->page-$i;
      if ($_page < 1) continue;
        $_pagelist .= &#39; <a href="&#39;.$this->url.&#39;&page=&#39;.$_page.&#39;" rel="external nofollow" rel="external nofollow" >&#39;.$_page.&#39;</a> &#39;;
     }
     $_pagelist .= &#39; <span class="me">&#39;.$this->page.&#39;</span> &#39;;
     for ($i=1;$i<=$this->bothnum;$i++) {
      $_page = $this->page+$i;
        if ($_page > $this->pagenum) break;
        $_pagelist .= &#39; <a href="&#39;.$this->url.&#39;&page=&#39;.$_page.&#39;" rel="external nofollow" rel="external nofollow" >&#39;.$_page.&#39;</a> &#39;;
     }
     return $_pagelist;
   }
   //首页
   private function first() {
     if ($this->page > $this->bothnum+1) {
        return &#39; <a href="&#39;.$this->url.&#39;" rel="external nofollow" >1</a> ...&#39;;
     }
   }
   //上一页
   private function prev() {
     if ($this->page == 1) {
        return &#39;<span class="disabled">上一页</span>&#39;;
     }
     return &#39; <a href="&#39;.$this->url.&#39;&page=&#39;.($this->page-1).&#39;" rel="external nofollow" >上一页</a> &#39;;
   }
   //下一页
   private function next() {
     if ($this->page == $this->pagenum) {
        return &#39;<span class="disabled">下一页</span>&#39;;
     }
     return &#39; <a href="&#39;.$this->url.&#39;&page=&#39;.($this->page+1).&#39;" rel="external nofollow" >下一页</a> &#39;;
   }
   //尾页
   private function last() {
     if ($this->pagenum - $this->page > $this->bothnum) {
        return &#39; ...<a href="&#39;.$this->url.&#39;&page=&#39;.$this->pagenum.&#39;" rel="external nofollow" >&#39;.$this->pagenum.&#39;</a> &#39;;
     }
   }
   //分页信息
   public function showpage() {
     $_page .= $this->first();
     $_page .= $this->pageList();
     $_page .= $this->last();
     $_page .= $this->prev();
     $_page .= $this->next();
     return $_page;
   }
 }
?>

Le style de pagination est tel qu'indiqué dans la figure ci-dessous :

Instructions d'utilisation :

<?php
  $_page = new Page($_total,$_pagesize);
  //其中 $_total 是数据集的总条数,$_pagesize 是每页显示的数量.
?>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn