首頁 >php教程 >php手册 >php实现google样式的分页

php实现google样式的分页

WBOY
WBOY原創
2016-06-06 19:58:071227瀏覽

废话不多说,直接看代码吧 Pager.class.php 代码如下 class Pager{ /** *int总页数 **/ protected $pageTotal ; /** **/ protected $previous ; /** **/ protected $next ; /** *int中间页起始序号 **/ protected $startPage ; /** *int中间页终止序号 **/ pr

 废话不多说,直接看代码吧

 

Pager.class.php 代码如下

  1. class Pager {
  2.     /**
  3.      *int 总页数
  4.      * */
  5.     protected $pageTotal;
  6.     /**
  7.      * */
  8.     protected $previous;
  9.     /**
  10.      * */
  11.     protected $next;
  12.     /**
  13.      *int 中间页起始序号
  14.      * */
  15.     protected $startPage;
  16.     /**
  17.      *int 中间页终止序号
  18.      * */
  19.     protected $endPage;
  20.     /**
  21.      *int 记录总数
  22.      * */
  23.     protected $recorbTotal;
  24.     /**
  25.      *int 每页显示记录数
  26.      * */
  27.     protected $pageSize;
  28.     /**
  29.      *int 当前显示页
  30.      * */
  31.     protected $currentPage;
  32.     /**
  33.      *string 基url地址
  34.      * */
  35.     protected $baseUri;
  36.     
  37.     /**
  38.      * @return string 获取基url地址
  39.      */
  40.     public function getBaseUri() {
  41.         return $this->baseUri;
  42.     }
  43.     
  44.     /**
  45.      * @return int 获取当前显示页
  46.      */
  47.     public function getCurrentPage() {
  48.         return $this->currentPage;
  49.     }
  50.     
  51.     /**
  52.      * @return int 获取每页显示记录数
  53.      */
  54.     public function getPageSize() {
  55.         return $this->pageSize;
  56.     }
  57.     
  58.     /**
  59.      * @return int 获取记录总数
  60.      */
  61.     public function getRecorbTotal() {
  62.         return $this->recorbTotal;
  63.     }
  64.     
  65.     /**
  66.      * @param string $baseUri 设置基url地址
  67.      */
  68.     public function setBaseUri($baseUri) {
  69.         $this->baseUri = $baseUri;
  70.     }
  71.     
  72.     /**
  73.      * @param int $currentPage 设置当前显示页
  74.      */
  75.     public function setCurrentPage($currentPage) {
  76.         $this->currentPage=$currentPage;
  77.     }
  78.     
  79.     /**
  80.      * @param int $pageSize 设置每页显示记录数
  81.      */
  82.     public function setPageSize($pageSize) {
  83.         $this->pageSize = $pageSize;
  84.     }
  85.     
  86.     /**
  87.      * @param int $recorbTotal 设置获取记录总数
  88.      */
  89.     public function setRecorbTotal($recorbTotal) {
  90.         $this->recorbTotal = $recorbTotal;
  91.     }
  92.     
  93.     /**
  94.      *构造函数
  95.      * */
  96.     public function __construct()
  97.     {
  98.         $this->pageTotal = 0;
  99.         $this->previous = 0;
  100.         $this->next = 0;
  101.         $this->startPage = 0;
  102.         $this->endPage = 0;
  103.         
  104.         $this->pageSize = 20;
  105.         $this->currentPage = 0;
  106.     }
  107.     
  108.     /**
  109.      *分页算法
  110.      * */
  111.     private function arithmetic() {
  112.         if ($this->currentPage 
  113.             $this->currentPage = 1;
  114.         
  115.         $this->pageTotal = floor ( $this->recorbTotal / $this->pageSize ) + ($this->recorbTotal % $this->pageSize > 0 ? 1 : 0);
  116.         
  117.         if ($this->currentPage > 1 && $this->currentPage > $this->pageTotal)
  118.             header ( 'location:' . $this->baseUri . 'page=' . $this->pageTotal );
  119.         
  120.         $this->next = $this->currentPage + 1;
  121.         $this->previous = $this->currentPage - 1;
  122.         
  123.         $this->startPage = ($this->currentPage + 5) > $this->pageTotal ? $this->pageTotal - 10 : $this->currentPage - 5;
  124.         $this->endPage = $this->currentPage $this->currentPage + 5;
  125.         
  126.         if ($this->startPage 
  127.             $this->startPage = 1;
  128.         
  129.         if ($this->pageTotal $this->endPage)
  130.             $this->endPage = $this->pageTotal;
  131.     }
  132.     
  133.     /**
  134.      *分页样式
  135.      * */
  136.     protected function pageStyle() {
  137.         $result = "共" . $this->pageTotal . "页      ";
  138.         
  139.         if ($this->currentPage > 1)
  140.             $result .= " . $this->baseUri . "page=1/">9   . $this->baseUri . "page=$this->previous/">3";
  141.         else
  142.             $result .= "9 3";
  143.         
  144.         for($i = $this->startPage; $i $this->endPage; $i ++) {
  145.             if ($this->currentPage == $i)
  146.                 $result .= "  $i";
  147.             else
  148.                 $result .= "   . $this->baseUri . "page=$i/">$i";
  149.         }
  150.         
  151.         if ($this->currentPage != $this->pageTotal) {
  152.             $result .= "   . $this->baseUri . "page=$this->next/">4";
  153.             $result .= "   . $this->baseUri . "page=$this->pageTotal/">:";
  154.         } else {
  155.             $result .= 4 :";
  156.         }
  157.         return $result;
  158.     }
  159.     
  160.     /**
  161.      *执行分页
  162.      * */
  163.     public function execute() {
  164.         if ($this->baseUri != "" && $this->recorbTotal == 0)
  165.             return "";
  166.         $this->arithmetic();
  167.         return $this->pageStyle ();
  168.     }
  169. }

调用代码(test.php 代码如下)

  1. include_once 'Pager.class.php';
  2. $pager=new Pager();
  3. if (isset ( $_GET ['page'] ) && ! emptyempty ( $_GET ['page'] ))
  4.     $pager->setCurrentPage($_GET ['page']);
  5. else
  6.     $pager->setCurrentPage(1);
  7.     
  8. $pager->setRecorbTotal(1000);
  9. $pager->setBaseUri("test.php?");
  10. echo $pager->execute();

 

数据库结合 mysql 通用存储过程分页 海量数据分页  就是一个完美的分页了

 

我们还可继承 Pager 类重写pageStyle方法就可以有不同的样式了. yes ok

 

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn