首頁  >  文章  >  後端開發  >  php分頁程式碼範例及在ZF中的使用

php分頁程式碼範例及在ZF中的使用

WBOY
WBOY原創
2016-07-25 08:52:051215瀏覽
複製程式碼
  1. $nav='';//用來保存頁數的一個變數
  2. for ($i=1;$i{
  3.   $nav.="第".$i."頁 " ;
  4. }
複製程式碼

以上的for迴圈將輸出如 第1頁,第2頁,第3頁,第4頁,第5頁,第6頁,第7頁,第8頁,第9頁,第10頁,第11頁,第12頁,第13頁 如果我們只想每次只顯示十個頁面呢?例如1-10頁,11-20頁 稍微修改下for迴圈即可:

  1. $step= floor(($pageNow-1)/10)*10 1;
  2. for ($i= $step;$i{
  3.   $nav.="第".$i ."頁 ";
  4. }
複製程式碼

例如,目前頁$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語句的函數就能得到

  1. /**
  2. * $sql語句:①取得資料②取得總記錄數
  3. */
  4. class fenyePage{
  5. public $pageSize=5;///每頁顯示的數量-->程式設計師指定的
  6. public $rowCount;//這是從資料庫取得的(形如SELECT COUNT(id) FROM TABLE)用來保存總共有多少筆記錄
  7. public $pageNow;//透過$_GET['page']取得的,用來保存目前所在的頁碼
  8. public $pageCount;//計算得到的,用來保存總共有多少頁
  9. public $res_arr; //用來保存要顯示到頁面的資料(例如儲存SELECT * FROM TABLE LIMIT 0,10 擷取的資料)
  10. public $nav;//顯示第幾頁第幾頁的導覽條
  11. /* *
  12. * 取得目前頁面的超連結
  13. *
  14. * @author 小飛 2012/5/30
  15. */
  16. public function getLink()
  17. {
  18. $this->nav='';
  19. $this->pageCount=ceil(($this->rowCount/$this ->pageSize));
  20. $step= floor(($this->pageNow-1)/10)*10 1;
  21. if ($this->pageNow>10)
  22. {
  23. $this->nav.=" ";//整體每10頁向前翻
  24. }
  25. if ($this->pageNow!=1)
  26. {
  27. $this->nav.=" 上一頁 ";
  28. }
  29. if ($this->pageNow!=1)
  30. {
  31. $this->nav.="首頁
  32. ";
  33. }
  34. for ($start=$step;$start pageCount;$start )
  35. {
  36. $this->nav.="".$start." " ;
  37. }
  38. if ($this->pageNow!=$this->pageCount)
  39. {
  40. $this->nav.="末頁 ";
  41. }
  42. if ($this->pageNow!=$this->pageCount)
  43. {
  44. $this- >nav.=" 下一頁";
  45. }
  46. if ($this ->pageCount>10 && $this->pageNowpageCount-8){
  47. $this->nav.=" >> ";//整體每10頁向後翻
  48. }
  49. $this->nav.="/共有".$this->pageCount."頁";
  50. }
  51. }
  52. ?>
複製程式碼

由於zf中操作資料庫的任務由model層來完成,所以,我將獲取$rowCount的值的函數放在了對應的表model中 例如:我是操作order表的 那麼當我要顯示所有訂單資訊的時候,我透過order類別中的showorder()方法取得$rowCount的值,並將其付給分頁類別中的$rowCount屬性 同樣,將要顯示在頁面上的資料資訊也一併付給了分頁類中的$res_arr屬性 這樣,我們就可以很容易的透過實例化一個分頁類別(fenyePage),然後將其透過參數傳給showorder()函數,由該函數完成以下動作: ①要顯示在頁面上的信息 ②表中總共有多少筆記錄

  1. /**
  2. * 根據指定的使用者id,查詢該使用者的歷史訂餐記錄
  3. *
  4. * @author 小飛2012/5/30
  5. * @param $id 使用者id
  6. * @param $fenye 實例化的一個物件,用來處理分頁
  7. * @todo $sql1語句"select * from table where * limit 0,10" 此sql語句主要用來擷取資料庫中的資料,用以顯示在view層
  8. * @todo $sql2語句"select count(id) from table" 此sql語句用來得到總的資料量
  9. * @link http://bbs.it-home.org
  10. */
  11. public function showorder($id=null,$fenye=null)
  12. public function showorder($id=null,$fenye=null)
  13. public function showorder($id=null,$fenye=null)
  14. public function showorder($id=null,$fenye=null)
  15. public function showorder($id=null,$fenye=null)
  16. {
  17. $db = $this->getAdapter();
  18. $select=$db->select();
  19. $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'));
  20. if ($id!=null){
  21. $select->where('o.user_id=?',$id);
  22. }
  23. $select->join(array('d'= >'department'),'o.dep_id = d.id','d.dep_name');
  24. if($fenye!=null){
  25. $select->limit($fenye->pageSize, ($fenye->pageNow-1)*$fenye->pageSize);
  26. }
  27. $sql1=$select->__toString();
  28. //此sql語句主要用來計算總的資料量
  29. $sql2="SELECT COUNT(id) FROM `order`";
  30. $fenye->res_arr=$db->fetchAll($sql1);//將要顯示的資料儲存到分頁類別的$ res_arr屬性當中,方便呼叫
  31. $rowCount=$db->fetchAll($sql2);//將表格中的總資料量儲存到分頁類別的rowCount屬性當中
$fenye->rowCount=$rowCount [0]['COUNT(id)'];
$fenye->getLink(); return $fenye->res_arr}


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