Zend Framework分页类用法详解


Posted in PHP onMarch 22, 2016

本文实例讲述了Zend Framework分页类用法。分享给大家供大家参考,具体如下:

1、分页类Pagination.php,最好是把这个类放在Zend目录下

class XY_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 = " | ";
         //页数字间的间隔符 /
  public function __construct($itemCount, $pageSize)
  {
    if(!is_numeric($itemCount) || (!is_numeric($pageSize)))
    throw new Exception("Pagination Error:not Number");
    $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;
    }
  }
  /**
   * 返回当前页
   * @param int 当前页
   */
  public function getCurrentPage()
  {
    return $this->_currentPage;
  }
  /**
   * 返回导航栏目
   * @return string 导航html class="PageNavigation"
   */
  public function getNavigation()
  {
    $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;
  }
  /**
   * 取得导航栏显示导航总页数
   *
   * @return int 导航栏显示导航总页数
   */
  public function getNavigationItemCount()
  {
    return $this->_navigationItemCount;
  }
  /**
   * 设置导航栏显示导航总页数
   *
   * @param int $navigationCount:导航栏显示导航总页数
   */
  public function setNavigationItemCoun($navigationCount)
  {
    if(is_numeric($navigationCount))
    {
      $this->_navigationItemCount = $navigationCount;
    }
  }
  /**
   * 设置首页显示字符
   * @param string $firstPageString 首页显示字符
   */
  public function setFirstPageString($firstPageString)
  {
    $this->_firstPageString = $firstPageString;
  }
  /**
   * 设置上一页导航显示字符
   * @param string $previousPageString:上一页显示字符
   */
  public function setPreviousPageString($previousPageString)
  {
    $this->_previousPageString = $previousPageString;
  }
  /**
   * 设置下一页导航显示字符
   * @param string $nextPageString:下一页显示字符
   */
  public function setNextPageString($nextPageString)
  {
    $this->_nextPageString = $nextPageString;
  }
  /**
   * 设置未页导航显示字符
   * @param string $nextPageString:未页显示字符
   */
  public function setLastPageString($lastPageString)
  {
    $this->_lastPageString = $lastPageString;
  }
  /**
   * 设置导航字符显示位置
   * @param string $align:导航位置
   */
  public function setAlign($align)
  {
    $align = strtolower($align);
    if($align == "center")
    {
      $this->_align = "center";
    }elseif($align == "right")
    {
      $this->_align = "right";
    }else
    {
      $this->_align = "left";
    }
  }
  /**
   * 设置页面参数名称
   * @param string $pageParamName:页面参数名称
   */
  public function setPageParamName($pageParamName)
  {
    $this->_PageParaName = $pageParamName;
  }
  /**
   * 获取页面参数名称
   * @return string 页面参数名称
   */
  public function getPageParamName()
  {
    return $this->_PageParaName;
  }
  /**
   * 生成导航链接地址
   * @param int $targetPage:导航页
   * @return string 链接目标地址
   */
  private function createHref($targetPage = null)
  {
    $params = $this->_front->getRequest()->getParams();
        $module = $params["module"];
    $controller = $params["controller"];
    $action = $params["action"];
    $targetUrl = $this->_front->getBaseUrl()."/$module/$controller/$action";
    foreach ($params as $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中的indexController Function里面调用:

require_once 'Zend/Pagination.php';
$Users = new Users();
//$rows = $Users->getAdapter()->fetchOne("select count(*) from users where `role`!='admin'"); //recorde count
$rows = $Users->fetchAll("`role`!='admin'")->count(); //查询记录总数
$rowsPerPage = 5; //perPage recordes
$curPage = 1;
if($this->_request->getParam('page'))
{
    $curPage = $this->_request->getParam('page');
}
//search data and display
$this->view->users = $Users->fetchAll("`role`!='admin'",'id desc',$rowsPerPage,($curPage-1)*$rowsPerPage)->toArray();
$Pager = new XY_Pagination($rows,$rowsPerPage);
$this->view->pagebar = $Pager->getNavigation();

3、在view中调用分页更简单了。

pagebar?>

或者在smarty模板情况下

<{$pagebar}>

希望本文所述对大家基于Zend Framework框架的PHP程序设计有所帮助。

PHP 相关文章推荐
用文本文件制作留言板提示(下)
Oct 09 PHP
php目录管理函数小结
Sep 10 PHP
php 404错误页面实现代码
Jun 22 PHP
php 无限分类的树类代码
Dec 03 PHP
PHP动态创建Web站点的方法
Aug 14 PHP
FireFox浏览器使用Javascript上传大文件
Oct 30 PHP
简单的php缓存类分享     php缓存机制
Jan 22 PHP
thinkphp3.2点击刷新生成验证码
Feb 16 PHP
php版交通银行网银支付接口开发入门教程
Sep 26 PHP
php+ajax实现异步上传文件或图片功能
Jul 18 PHP
ThinkPHP5.0框架验证码功能实现方法【基于第三方扩展包】
Mar 11 PHP
php ZipArchive实现多文件打包下载实例
Oct 31 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
Mar 22 #PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
Mar 21 #PHP
深入解析PHP的Laravel框架中的event事件操作
Mar 21 #PHP
Android App中DrawerLayout抽屉效果的菜单编写实例
Mar 21 #PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
Mar 21 #PHP
PHP编写学校网站上新生注册登陆程序的实例分享
Mar 21 #PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
Mar 21 #PHP
You might like
phpMyAdmin 安装及问题总结
2009/05/28 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
2019/07/26 PHP
在IE下获取object(ActiveX)的Param的代码
2009/09/15 Javascript
jQuery LigerUI 使用教程表格篇(1)
2012/01/18 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
2013/11/13 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
2014/03/18 Javascript
javascritp添加url参数将参数加入到url中
2014/09/25 Javascript
为什么JS中eval处理JSON数据要加括号
2015/04/13 Javascript
javascript+css3 实现动态按钮菜单特效
2016/02/06 Javascript
javascript HTML5文件上传FileReader API
2020/03/27 Javascript
Seajs是什么及sea.js 由来,特点以及优势
2016/10/13 Javascript
JS实现根据用户输入分钟进行倒计时功能
2016/11/14 Javascript
手机端js和html5刮刮卡效果
2020/09/29 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
浅谈js基础数据类型和引用类型,深浅拷贝问题,以及内存分配问题
2017/09/02 Javascript
JS加密插件CryptoJS实现的DES加密示例
2018/08/16 Javascript
详解用Webpack与Babel配置ES6开发环境
2019/03/12 Javascript
layui实现tab的添加拒绝重复的方法
2019/09/04 Javascript
element el-tree组件的动态加载、新增、更新节点的实现
2020/02/27 Javascript
JavaScript实现网页留言板功能
2020/11/23 Javascript
[01:00:06]加油DOTA_EP01_网络版
2014/08/09 DOTA
用smtplib和email封装python发送邮件模块类分享
2014/02/17 Python
Python中max函数用法实例分析
2015/07/17 Python
PyQt5实现拖放功能
2018/04/25 Python
python 获取毫秒数,计算调用时长的方法
2019/02/20 Python
pycharm 设置项目的根目录教程
2020/02/12 Python
详解PyQt5信号与槽的几种高级玩法
2020/03/24 Python
Django如何使用jwt获取用户信息
2020/04/21 Python
英国在线自行车店:Merlin Cycles
2018/08/20 全球购物
Myprotein比利时官方网站:欧洲第一运动营养品牌
2020/10/04 全球购物
《和我们一样享受春天》教学反思
2014/02/07 职场文书
保密工作实施方案
2014/02/24 职场文书
职业生涯规划书前言
2014/04/15 职场文书
新颖的化妆品活动方案
2014/08/21 职场文书
反四风对照检查材料思想汇报
2014/09/16 职场文书