ホームページ  >  記事  >  バックエンド開発  >  ThinkPHP でページング機能を実装する方法

ThinkPHP でページング機能を実装する方法

墨辰丷
墨辰丷オリジナル
2018-05-23 14:09:291139ブラウズ

この記事では、主にページング機能を実装するための ThinkPHP の関連コードを詳しく紹介します。興味のある方は、以前の記事を参照してください。(アップロード、サムネイル、検証コード、自動検証フォーム)。記事内のすべては、ThinkPHP フレームワークによってカプセル化されたクラスに基づいて実装されているため、今回はフレームワークで使用するページング クラスを作成しました。

まず、ルート ディレクトリに Tools フォルダーを作成し、Tools フォルダーの下に Page.class.php クラス ファイルを作成します。これにより、後でカスタマイズしたツール クラスを Tools フォルダーの下に配置できるようになります。

このタイプのパッケージには次の機能があります: リクエストアドレスの取得、開始ページ、表示する行、終了ページから終了まで、ページ番号リスト (ホームページのハイパーリンク、前ページ、ページ番号リストのハイパーリンク、次のページ) 、終了ページ)ページ、ジャンプ)、ページングには十分です。

以下は 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;

  }


}

コントローラーコード:

フォアグラウンド表示コード

5b4f1099f9c392e40df600c9df44893c

上はこの記事の内容 全ての内容が皆様の学習のお役に立てれば幸いです。

関連する推奨事項:


mongodb への php 拡張機能 (最初の知人)_javascript スキル

mongodb への php 拡張機能 (小さなテスト)_javascript スキル

php 画像生成関数 違いの分析between_基礎知識


以上がThinkPHP でページング機能を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。