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程序设计有所帮助。