在php中分頁相對來說很是簡單的,我們只要理解到幾點就好如pagesize,count,page這幾個變量,總體多少頁,當前是第幾頁,第頁要顯示幾條記錄,我們只要一個公式可以算出來。
只需要得到兩個變量就成功了一半:每頁要顯示的記錄數$pageSize,表中總的數據量 $rowCount,有了以上兩個變量,我們就可以得出 共有幾頁了$pageCount,然后通過for循環,比如總共有13個頁面,那么很容易就能通過for循環輸出頁數,代碼如下:
- $nav='';//用來保存頁數的一個變量
- for ($i=1;$i<=13;$i++)
- {
- $nav.="<a href='index.php?page=".$i."'>第".$i."頁</a> ";
- }
以上的for循環將輸出如:第1頁,第2頁,第3頁,第4頁,第5頁,第6頁,第7頁,第8頁,第9頁,第10頁,第11頁,第12頁,第13頁
如果我們只想每次只顯示十個頁面呢?比如1-10頁,11-20頁,很簡單,只要稍微修改下for循環即可實現,代碼如下:
- $step= floor(($pageNow-1)/10)*10+1;
- for ($i=$step;$i<=$step+10;$i++)
- {
- $nav.="<a href='index.php?page=".$i."'>第".$i."頁</a> ";
- }
比如,當前頁面$pageNow如何在1~10之間的話,那么$step=0,當前頁面$pageNow如何在11~20之間的話,那么$step=10,當前頁面$pageNow如何在21~30之間的話,那么$step=20 ,參考具體的實現過程的代碼,我們不難發現,for循環的第二個條件只需要加上10就可以實現每次只顯示10也的情況了,我們將這一步分裝在fenyePage類中的getLink()方法中,話又說回來,如何才能得到$pageSize和$rowCount兩個變量的值呢?
$pageSize可以由程序員自己指定,$rowCount可以借助一個簡單的執行sql語句的函數就能得到,代碼如下:
- <?php
- /**
- * $sql語句:①獲取數據②獲取總記錄數
- */
- class fenyePage{
- public $pageSize=5;//每頁顯示的數量-->程序員指定的
- public $rowCount;//這是從數據庫中獲取的(形如SELECT COUNT(id) FROM TABLE)用來保存總共有多少條記錄
- public $pageNow;//通過$_GET['page']獲取的,用來保存當前所在的頁碼
- public $pageCount;//計算得到的,用來保存總共有多少頁
- public $res_arr;//用來保存要顯示到頁面的數據(比如保存SELECT * FROM TABLE LIMIT 0,10 檢索的數據)
- public $nav;//顯示第幾頁第幾頁的導航條
- /**
- * 取得當前頁面的超鏈接
- *
- * @author 小飛 2012/5/30
- */
- public function getLink()
- {
- $this->nav='';
- $this->pageCount=ceil(($this->rowCount/$this->pageSize));
- $step= floor(($this->pageNow-1)/10)*10+1;
- if ($this->pageNow>10)
- {
- $this->nav.=" <a href='index.php?page=".($step-1)."'> << </a> ";//整體每10頁向前翻
- }
- if ($this->pageNow!=1)
- {
- $this->nav.="<a href='index.php?page=".($this->pageNow-1)."'> 上一頁</a> ";
- }
- if ($this->pageNow!=1)
- {
- $this->nav.="<a href='index.php?page=1'>首頁</a> ";
- }
- for ($start=$step;$start<$step+10 && $start<=$this->pageCount;$start++)
- {
- $this->nav.="<a href='index.php?page=".$start."'>".$start."</a> ";
- }
- if ($this->pageNow!=$this->pageCount)
- {
- $this->nav.="<a href='index.php?page=".$this->pageCount."'>末頁</a> ";
- }
- if ($this->pageNow!=$this->pageCount)
- {
- $this->nav.=" <a href='index.php?page=".($this->pageNow+1)."'>下一頁</a>";
- }
- if ($this->pageCount>10 && $this->pageNow<$this->pageCount-8){
- $this->nav.=" <a href='index.php?page=".($step+10)."'> >> </a>";//整體每10頁向后翻
- }
- $this->nav.="/共有".$this->pageCount."頁";
- }
- }
- ?>
同樣,將要顯示在頁面上的數據信息也一并付給了分頁類中的$res_arr屬性,這樣,我們就可以很容易的通過實例化一個分頁類(fenyePage),然后將其通過參數傳給showorder()函數,由該函數完成以下動作:
①要顯示在頁面上的信息
②表中總共有多少條記錄
總結分頁最核心的幾句代碼:
$this->pageCount=ceil(($this->rowCount/$this->pageSize));
$step= floor(($this->pageNow-1)/10)*10+1;
再就是sql中的select * from table where * limit 0,10,也就是本實例中的$select->limit($fenye->pageSize,($fenye->pageNow-1)*$fenye->pageSize); 了。
新聞熱點
疑難解答