Maison  >  Article  >  développement back-end  >  Comment implémenter la fonction de pagination dans ThinkPHP

Comment implémenter la fonction de pagination dans ThinkPHP

墨辰丷
墨辰丷original
2018-05-23 14:09:291125parcourir

Cet article présente principalement le code pertinent de ThinkPHP pour implémenter la fonction de pagination en détail. Il a une certaine valeur de référence. Les amis intéressés peuvent se référer aux articles précédents

(téléchargement, vignette, code de vérification, vérification automatique). form) L'implémentation fonctionnelle présentée dans l'article est entièrement implémentée sur la base des classes encapsulées par le framework ThinkPHP, donc cette fois j'ai écrit une classe de pagination à utiliser dans le framework.

Créez d'abord un dossier Outils dans le répertoire racine et créez le fichier de classe Page.class.php sous le dossier Outils, afin que les classes d'outils personnalisées puissent être placées sous le dossier Outils à l'avenir.

Ce type de package a les fonctions suivantes : obtenir l'adresse de la demande, la page de démarrage, la ligne à afficher, la page de fin à partir de laquelle se terminer, la liste des numéros de page (lien hypertexte de la page d'accueil, page précédente, lien hypertexte de la liste des numéros de page, next Une page, dernière page, sauter), assez pour la pagination !

Ce qui suit est le code Page.class.php

<?php
//命名空间的名称与上级目录tools一致
//原因:当前Page.class.php类文件会被自动加载机制引入
//   在引入的同时会把"tools"变为文件的上级目录,进而获得该Page类文件
namespace Tools;

class Page {
  private $total; //数据表中总记录数
  private $listRows; //每页显示行数
  private $limit;
  private $uri;  //当前链接URL
  private $pageNum; //页数
  private $config=array(&#39;header&#39;=>"个记录", "prev"=>"上一页", "next"=>"下一页", "first"=>"首 页", "last"=>"尾 页");
  private $listNum=8; //限制页码列表数目
  
  /*
   * $total 总记录数
   * $listRows 每页显示行数
   */
  public function __construct($total, $listRows=10, $pa=""){
    $this->total=$total;  //数据表中总记录数
    $this->listRows=$listRows; //设置每页显示行数
    $this->uri=$this->getUri($pa); //请求地址
    $this->page=!empty($_GET["page"]) ? $_GET["page"] : 1; //当前页
    $this->pageNum=ceil($this->total/$this->listRows); //总页数
    $this->limit=$this->setLimit(); //限制每页长度
  }

  private function setLimit(){
    return "Limit ".($this->page-1)*$this->listRows.", {$this->listRows}";
  }

  //请求地址
  private function getUri($pa){
    $url=$_SERVER["REQUEST_URI"].(strpos($_SERVER["REQUEST_URI"], &#39;?&#39;)?&#39;&#39;:"?").$pa;
    $parse=parse_url($url);

  

    if(isset($parse["query"])){
      parse_str($parse[&#39;query&#39;],$params);
      unset($params["page"]);
      $url=$parse[&#39;path&#39;].&#39;?&#39;.http_build_query($params);
      
    }

    return $url;
  }

  function __get($args){
    if($args=="limit")
      return $this->limit;
    else
      return null;
  }

  //开始页,从哪一条显示
  private function start(){
    if($this->total==0)
      return 0;
    else
      return ($this->page-1)*$this->listRows+1;
  }

  //从哪一条结束
  private function end(){
    return min($this->page*$this->listRows,$this->total);
  }

  //首页超链接
  private function first(){
    $html = "";
    if($this->page==1)
      $html.=&#39;&#39;;
    else
      $html.="  <a href=&#39;{$this->uri}&page=1&#39;>{$this->config["first"]}</a>  ";

    return $html;
  }

  //上一页
  private function prev(){
    $html = "";
    if($this->page==1)
      $html.=&#39;&#39;;
    else
      $html.="  <a href=&#39;{$this->uri}&page=".($this->page-1)."&#39;>{$this->config["prev"]}</a>  ";

    return $html;
  }

  //页码数字列表超链接
  private function pageList(){
    $linkPage="";
    
    $inum=floor($this->listNum/2);
  
    for($i=$inum; $i>=1; $i--){
      $page=$this->page-$i;

      if($page<1)
        continue;

      $linkPage.=" <a href=&#39;{$this->uri}&page={$page}&#39;>{$page}</a> ";

    }
  
    $linkPage.=" {$this->page} ";
    

    for($i=1; $i<=$inum; $i++){
      $page=$this->page+$i;
      if($page<=$this->pageNum)
        $linkPage.=" <a href=&#39;{$this->uri}&page={$page}&#39;>{$page}</a> ";
      else
        break;
    }

    return $linkPage;
  }

  //下一页
  private function next(){
    $html = "";
    if($this->page==$this->pageNum)
      $html.=&#39;&#39;;
    else
      $html.="  <a href=&#39;{$this->uri}&page=".($this->page+1)."&#39;>{$this->config["next"]}</a>  ";

    return $html;
  }

  //尾页
  private function last(){
    $html = "";
    if($this->page==$this->pageNum)
      $html.=&#39;&#39;;
    else
      $html.="  <a href=&#39;{$this->uri}&page=".($this->pageNum)."&#39;>{$this->config["last"]}</a>  ";

    return $html;
  }

  //跳转
  private function goPage(){
    return &#39;  <input type="text" onkeydown="javascript:if(event.keyCode==13){var page=(this.value>&#39;.$this->pageNum.&#39;)?&#39;.$this->pageNum.&#39;:this.value;location=\&#39;&#39;.$this->uri.&#39;&page=\&#39;+page+\&#39;\&#39;}" value="&#39;.$this->page.&#39;" style="width:25px"><input type="button" value="GO" onclick="javascript:var page=(this.previousSibling.value>&#39;.$this->pageNum.&#39;)?&#39;.$this->pageNum.&#39;:this.previousSibling.value;location=\&#39;&#39;.$this->uri.&#39;&page=\&#39;+page+\&#39;\&#39;">  &#39;;
  }

  //页码列表
  function fpage($display=array(0,1,2,3,4,5,6,7,8)){
    $html[0]="  共有<b>{$this->total}</b>{$this->config["header"]}  ";
    $html[1]="  每页显示<b>".($this->end()-$this->start()+1)."</b>条,本页<b>{$this->start()}-{$this->end()}</b>条  ";
    $html[2]="  <b>{$this->page}/{$this->pageNum}</b>页  ";
    
    $html[3]=$this->first();
    $html[4]=$this->prev();
    $html[5]=$this->pageList();
    $html[6]=$this->next();
    $html[7]=$this->last();
    $html[8]=$this->goPage();
    $fpage=&#39;&#39;;
    foreach($display as $index){
      $fpage.=$html[$index];
    }

    return $fpage;

  }


}

Code du contrôleur :

//商品列表
  function showlist(){

   //实现分页效果
   $goods = D(&#39;goods&#39;);

   //① 获得数据的总记录条数
   $total = $goods -> count(); //select count(*) from sw_goods;
   $per = 7; //每页显示7条记录

   //②实例化分页类
   $page_obj = new \Tools\Page($total, $per);

   //③自定义sql语句,获取每页信息
   $sql = "select * from sw_goods order by goods_id desc ".$page_obj->limit;
   $info = $goods->query($sql);

   //④获取页码列表
   $pagelist = $page_obj->fpage(array(3,4,5,6,7,8));

   //分配
   $this->assign(&#39;pagelist&#39;,$pagelist);
   $this->assign(&#39;info&#39;,$info);
   $this->display();
  }

Code d'affichage de premier plan

5b4f1099f9c392e40df600c9df44893c

Ce qui précède est l'intégralité du contenu de cet article, j’espère qu’il sera utile à l’étude de chacun.


Recommandations associées :

Extension PHP vers mongodb (première connaissance)_compétences javascript

Extension php vers mongodb (un petit test)_compétences javascript

Analyse des différences entre les fonctions de génération d'images php_connaissances de base

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