-
-
$nav='';//用來保存頁數的一個變數
- for ($i=1;$i{
- $nav.="第".$i."頁 " ;
- }
複製程式碼
以上的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{
- $nav.="第".$i ."頁 ";
- }
複製程式碼
例如,目前頁$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語句的函數就能得到
-
-
/**
- * $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.=" ";//整體每10頁向前翻
- }
- if ($this->pageNow!=1)
- {
- $this->nav.=" 上一頁 ";
- }
- if ($this->pageNow!=1)
- {
- $this->nav.="首頁
";
- }
- for ($start=$step;$start pageCount;$start )
- {
- $this->nav.="".$start." " ;
- }
- if ($this->pageNow!=$this->pageCount)
- {
- $this->nav.="末頁 ";
- }
- if ($this->pageNow!=$this->pageCount)
- {
- $this- >nav.=" 下一頁";
- }
- if ($this ->pageCount>10 && $this->pageNowpageCount-8){
- $this->nav.=" >> ";//整體每10頁向後翻
- }
- $this->nav.="/共有".$this->pageCount."頁";
- }
- }
- ?>
複製程式碼
由於zf中操作資料庫的任務由model層來完成,所以,我將獲取$rowCount的值的函數放在了對應的表model中
例如:我是操作order表的
那麼當我要顯示所有訂單資訊的時候,我透過order類別中的showorder()方法取得$rowCount的值,並將其付給分頁類別中的$rowCount屬性
同樣,將要顯示在頁面上的資料資訊也一併付給了分頁類中的$res_arr屬性
這樣,我們就可以很容易的透過實例化一個分頁類別(fenyePage),然後將其透過參數傳給showorder()函數,由該函數完成以下動作:
①要顯示在頁面上的信息
②表中總共有多少筆記錄
-
-
/**
- * 根據指定的使用者id,查詢該使用者的歷史訂餐記錄
- *
- * @author 小飛2012/5/30
- * @param $id 使用者id
- * @param $fenye 實例化的一個物件,用來處理分頁
- * @todo $sql1語句"select * from table where * limit 0,10" 此sql語句主要用來擷取資料庫中的資料,用以顯示在view層
- * @todo $sql2語句"select count(id) from table" 此sql語句用來得到總的資料量
- * @link http://bbs.it-home.org
- */
- public function showorder($id=null,$fenye=null)
- public function showorder($id=null,$fenye=null)
- public function showorder($id=null,$fenye=null)
- public function showorder($id=null,$fenye=null)
- public function showorder($id=null,$fenye=null)
- {
- $db = $this->getAdapter();
- $select=$db->select();
- $select->from(array('o' => 'order' ),array('o.id','o.user_id','o.user_name','o.food_name','o.food_price','o.order_time','o.order_state'));
- if ($id!=null){
- $select->where('o.user_id=?',$id);
- }
- $select->join(array('d'= >'department'),'o.dep_id = d.id','d.dep_name');
- if($fenye!=null){
- $select->limit($fenye->pageSize, ($fenye->pageNow-1)*$fenye->pageSize);
- }
- $sql1=$select->__toString();
- //此sql語句主要用來計算總的資料量
- $sql2="SELECT COUNT(id) FROM `order`";
- $fenye->res_arr=$db->fetchAll($sql1);//將要顯示的資料儲存到分頁類別的$ res_arr屬性當中,方便呼叫
- $rowCount=$db->fetchAll($sql2);//將表格中的總資料量儲存到分頁類別的rowCount屬性當中
$fenye->rowCount=$rowCount [0]['COUNT(id)']; $fenye->getLink(); return $fenye->res_arr}
|
複製程式碼