|
每頁(yè)要顯示的記錄數(shù)$pageSize
表中總的數(shù)據(jù)量 $rowCount
有了以上兩個(gè)變量,我們就可以得出 共有幾頁(yè)了$pageCount
然后通過(guò)for循環(huán),比如總共有13個(gè)頁(yè)面,那么很容易就能通過(guò)for循環(huán)輸出頁(yè)數(shù)
復(fù)制代碼 代碼如下:
$nav='';//用來(lái)保存頁(yè)數(shù)的一個(gè)變量
for ($i=1;$i<=13;$i++)
{
$nav.="<a href='index.php?page=".$i."'>第".$i."頁(yè)</a> ";
}
以上的for循環(huán)將輸出如
第1頁(yè),第2頁(yè),第3頁(yè),第4頁(yè),第5頁(yè),第6頁(yè),第7頁(yè),第8頁(yè),第9頁(yè),第10頁(yè),第11頁(yè),第12頁(yè),第13頁(yè)
如果我們只想每次只顯示十個(gè)頁(yè)面呢?比如1-10頁(yè),11-20頁(yè)
很簡(jiǎn)單,只要稍微修改下for循環(huán)即可實(shí)現(xiàn)
復(fù)制代碼 代碼如下:
$step= floor(($pageNow-1)/10)*10+1;
for ($i=$step;$i<=$step+10;$i++)
{
$nav.="<a href='index.php?page=".$i."'>第".$i."頁(yè)</a> ";
}
比如,當(dāng)前頁(yè)面$pageNow如何在1~10之間的話,那么$step=0
當(dāng)前頁(yè)面$pageNow如何在11~20之間的話,那么$step=10
當(dāng)前頁(yè)面$pageNow如何在21~30之間的話,那么$step=20
參考具體的實(shí)現(xiàn)過(guò)程的代碼,我們不難發(fā)現(xiàn),for循環(huán)的第二個(gè)條件只需要加上10就可以實(shí)現(xiàn)每次只顯示10也的情況了,我們將這一步分裝在fenyePage類中的getLink()方法中
話又說(shuō)回來(lái),如何才能得到$pageSize和$rowCount兩個(gè)變量的值呢?
$pageSize可以又程序員自己指定,$rowCount可以借助一個(gè)簡(jiǎn)單的執(zhí)行sql語(yǔ)句的函數(shù)就能得到
復(fù)制代碼 代碼如下:
<?php
/**
* $sql語(yǔ)句:①獲取數(shù)據(jù)②獲取總記錄數(shù)
*/
class fenyePage{
public $pageSize=5;//每頁(yè)顯示的數(shù)量-->程序員指定的
public $rowCount;//這是從數(shù)據(jù)庫(kù)中獲取的(形如SELECT COUNT(id) FROM TABLE)用來(lái)保存總共有多少條記錄
public $pageNow;//通過(guò)$_GET['page']獲取的,用來(lái)保存當(dāng)前所在的頁(yè)碼
public $pageCount;//計(jì)算得到的,用來(lái)保存總共有多少頁(yè)
public $res_arr;//用來(lái)保存要顯示到頁(yè)面的數(shù)據(jù)(比如保存SELECT * FROM TABLE LIMIT 0,10 檢索的數(shù)據(jù))
public $nav;//顯示第幾頁(yè)第幾頁(yè)的導(dǎo)航條
/**
* 取得當(dāng)前頁(yè)面的超鏈接
*
* @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頁(yè)向前翻
}
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'>首頁(yè)</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."'>末頁(yè)</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頁(yè)向后翻
}
$this->nav.="/共有".$this->pageCount."頁(yè)";
}
}
?>
由于zf中操作數(shù)據(jù)庫(kù)的任務(wù)由model層來(lái)完成,所以,我將獲取$rowCount的值的函數(shù)放在了對(duì)應(yīng)的表model中
比如:我是操作order表的
那么當(dāng)我要顯示所有訂單信息的時(shí)候,我通過(guò)order類中的showorder()方法取得$rowCount的值,并將其付給分頁(yè)類中的$rowCount屬性
同樣,將要顯示在頁(yè)面上的數(shù)據(jù)信息也一并付給了分頁(yè)類中的$res_arr屬性
這樣,我們就可以很容易的通過(guò)實(shí)例化一個(gè)分頁(yè)類(fenyePage),然后將其通過(guò)參數(shù)傳給showorder()函數(shù),由該函數(shù)完成以下動(dòng)作:
①要顯示在頁(yè)面上的信息
②表中總共有多少條記錄
復(fù)制代碼 代碼如下:
/**
* 根據(jù)指定的用戶id,查詢?cè)撚脩舻臍v史訂餐記錄
*
* @author 小飛 2012/5/30
* @param $id 用戶id
* @param $fenye 實(shí)例化的一個(gè)對(duì)象,用來(lái)處理分頁(yè)
* @todo $sql1語(yǔ)句 "select * from table where * limit 0,10" 該sql語(yǔ)句主要用來(lái)檢索數(shù)據(jù)庫(kù)中的數(shù)據(jù),用以顯示在view層
* @todo $sql2語(yǔ)句 "select count(id) from table" 該sql語(yǔ)句用來(lái)得出總的數(shù)據(jù)量
*/
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語(yǔ)句主要用來(lái)計(jì)算總的數(shù)據(jù)量
$sql2="SELECT COUNT(id) FROM `order`";
$fenye->res_arr=$db->fetchAll($sql1);//將要顯示的數(shù)據(jù)存儲(chǔ)到分頁(yè)類的$res_arr屬性當(dāng)中,方便調(diào)用
$rowCount=$db->fetchAll($sql2);//將表中的總數(shù)據(jù)量保存到分頁(yè)類的rowCount屬性當(dāng)中
$fenye->rowCount=$rowCount[0]['COUNT(id)'];
$fenye->getLink();
return $fenye->res_arr;
}
至此,分頁(yè)類的功能就已經(jīng)實(shí)現(xiàn)了
原創(chuàng)文章:WEB開發(fā)_小飛
php技術(shù):php分頁(yè)思路以及在ZF中的使用,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。