Zend Framework分页类用法详解
本文实例讲述了ZendFramework分页类用法。分享给大家供大家参考,具体如下:
1、分页类Pagination.php,最好是把这个类放在Zend目录下
classXY_Pagination
{
private$_navigationItemCount=10;//导航栏显示导航总页数
private$_pageSize=null;//每页项目数
private$_align="right";//导航栏显示位置
private$_itemCount=null;//总项目数
private$_pageCount=null;//总页数
private$_currentPage=null;//当前页
private$_front=null;//前端控制器
private$_PageParaName="page";//页面参数名称
private$_firstPageString="|<<";//导航栏中第一页显示的字符
private$_nextPageString=">>";//导航栏中前一页显示的字符
private$_previousPageString="<<";//导航栏中后一页显示的字符
private$_lastPageString=">>|";//导航栏中最后一页显示的字符
private$_splitString="|";
//页数字间的间隔符/
publicfunction__construct($itemCount,$pageSize)
{
if(!is_numeric($itemCount)||(!is_numeric($pageSize)))
thrownewException("PaginationError:notNumber");
$this->_itemCount=$itemCount;
$this->_pageSize=$pageSize;
$this->_front=Zend_Controller_Front::getInstance();
$this->_pageCount=ceil($itemCount/$pageSize);//总页数
$page=$this->_front->getRequest()->getParam($this->_PageParaName);
if(empty($page)||(!is_numeric($page)))//为空或不是数字,设置当前页为1
{
$this->_currentPage=1;
}
else
{
if($page<1)
$page=1;
if($page>$this->_pageCount)
$page=$this->_pageCount;
$this->_currentPage=$page;
}
}
/**
*返回当前页
*@paramint当前页
*/
publicfunctiongetCurrentPage()
{
return$this->_currentPage;
}
/**
*返回导航栏目
*@returnstring导航htmlclass="PageNavigation"
*/
publicfunctiongetNavigation()
{
$navigation='';
$pageCote=ceil($this->_currentPage/($this->_navigationItemCount-1))-1;//当前页处于第几栏分页
$pageCoteCount=ceil($this->_pageCount/($this->_navigationItemCount-1));//总分页栏
$pageStart=$pageCote*($this->_navigationItemCount-1)+1;//分页栏中起始页
$pageEnd=$pageStart+$this->_navigationItemCount-1;//分页栏中终止页
if($this->_pageCount<$pageEnd)
{
$pageEnd=$this->_pageCount;
}
$navigation.="总共:{$this->_itemCount}条{$this->_pageCount}页\n";
if($pageCote>0)//首页导航
{
$navigation.='$this->_firstPageString";
}
if($this->_currentPage!=1)//上一页导航
{
$navigation.='$this->_previousPageString";
}
while($pageStart<=$pageEnd)//构造数字导航区
{
if($pageStart==$this->_currentPage)
{
$navigation.="$pageStart".$this->_splitString;
}
else
{
$navigation.='$pageStart".$this->_splitString;
}
$pageStart++;
}
if($this->_currentPage!=$this->_pageCount)//下一页导航
{
$navigation.='$this->_nextPageString";
}
if($pageCote<$pageCoteCount-1)//未页导航
{
$navigation.='$this->_lastPageString";
}
//添加直接导航框
//$navigation.='';
//2008年8月27号补充输入非正确页码后出现的错误——begin
$navigation.='';
//2008年8月27号补充输入非正确页码后出现的错误——end
$navigation.="";
return$navigation;
}
/**
*取得导航栏显示导航总页数
*
*@returnint导航栏显示导航总页数
*/
publicfunctiongetNavigationItemCount()
{
return$this->_navigationItemCount;
}
/**
*设置导航栏显示导航总页数
*
*@paramint$navigationCount:导航栏显示导航总页数
*/
publicfunctionsetNavigationItemCoun($navigationCount)
{
if(is_numeric($navigationCount))
{
$this->_navigationItemCount=$navigationCount;
}
}
/**
*设置首页显示字符
*@paramstring$firstPageString首页显示字符
*/
publicfunctionsetFirstPageString($firstPageString)
{
$this->_firstPageString=$firstPageString;
}
/**
*设置上一页导航显示字符
*@paramstring$previousPageString:上一页显示字符
*/
publicfunctionsetPreviousPageString($previousPageString)
{
$this->_previousPageString=$previousPageString;
}
/**
*设置下一页导航显示字符
*@paramstring$nextPageString:下一页显示字符
*/
publicfunctionsetNextPageString($nextPageString)
{
$this->_nextPageString=$nextPageString;
}
/**
*设置未页导航显示字符
*@paramstring$nextPageString:未页显示字符
*/
publicfunctionsetLastPageString($lastPageString)
{
$this->_lastPageString=$lastPageString;
}
/**
*设置导航字符显示位置
*@paramstring$align:导航位置
*/
publicfunctionsetAlign($align)
{
$align=strtolower($align);
if($align=="center")
{
$this->_align="center";
}elseif($align=="right")
{
$this->_align="right";
}else
{
$this->_align="left";
}
}
/**
*设置页面参数名称
*@paramstring$pageParamName:页面参数名称
*/
publicfunctionsetPageParamName($pageParamName)
{
$this->_PageParaName=$pageParamName;
}
/**
*获取页面参数名称
*@returnstring页面参数名称
*/
publicfunctiongetPageParamName()
{
return$this->_PageParaName;
}
/**
*生成导航链接地址
*@paramint$targetPage:导航页
*@returnstring链接目标地址
*/
privatefunctioncreateHref($targetPage=null)
{
$params=$this->_front->getRequest()->getParams();
$module=$params["module"];
$controller=$params["controller"];
$action=$params["action"];
$targetUrl=$this->_front->getBaseUrl()."/$module/$controller/$action";
foreach($paramsas$key=>$value)
{
if($key!="controller"&&$key!="module"&&$key!="action"&&$key!=$this->_PageParaName)
{
$targetUrl.="/$key/$value";
}
}
if(isset($targetPage))//指定目标页
$targetUrl.="/$this->_PageParaName/$targetPage";
else
$targetUrl.="/$this->_PageParaName/";
return$targetUrl;
}
}
?>
2、在indexController.php中的indexControllerFunction里面调用:
require_once'Zend/Pagination.php';
$Users=newUsers();
//$rows=$Users->getAdapter()->fetchOne("selectcount(*)fromuserswhere`role`!='admin'");//recordecount
$rows=$Users->fetchAll("`role`!='admin'")->count();//查询记录总数
$rowsPerPage=5;//perPagerecordes
$curPage=1;
if($this->_request->getParam('page'))
{
$curPage=$this->_request->getParam('page');
}
//searchdataanddisplay
$this->view->users=$Users->fetchAll("`role`!='admin'",'iddesc',$rowsPerPage,($curPage-1)*$rowsPerPage)->toArray();
$Pager=newXY_Pagination($rows,$rowsPerPage);
$this->view->pagebar=$Pager->getNavigation();
3、在view中调用分页更简单了。
pagebar?>
或者在smarty模板情况下
<{$pagebar}>
更多关于zend相关内容感兴趣的读者可查看本站专题:《ZendFrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于ZendFramework框架的PHP程序设计有所帮助。