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 相关文章推荐
Windows 下的 PHP-PEAR 安装方法
Nov 20 PHP
用 Composer构建自己的 PHP 框架之设计 MVC
Oct 30 PHP
推荐一款MAC OS X 下php集成开发环境mamp
Nov 08 PHP
php获取文章上一页与下一页的方法
Dec 01 PHP
php正则匹配html中带class的div并选取其中内容的方法
Jan 13 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
Apr 03 PHP
简单解决新浪SAE无法上传文件的问题
May 13 PHP
php外部执行命令函数用法小结
Oct 11 PHP
PHP判断密码强度的方法详解
May 26 PHP
PHP实现关键字搜索后描红功能示例
Jul 03 PHP
PHP中非常有用却鲜有人知的函数集锦
Aug 17 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
Jan 26 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
最新的php 文件上传模型,支持多文件上传
2009/08/13 PHP
PHP读取txt文件的内容并赋值给数组的代码
2011/11/03 PHP
ajax php传递和接收变量实现思路及代码
2012/12/19 PHP
JS读取cookies信息(记录用户名)
2012/01/10 Javascript
js对象与打印对象分析比较
2013/04/23 Javascript
js实现回放拖拽轨迹从过程上进行分析
2014/06/26 Javascript
使用js画图之画切线
2015/01/12 Javascript
javascript事件冒泡实例分析
2015/05/13 Javascript
JQuery悬停控制图片轮播——代码简单
2015/08/05 Javascript
JavaScript测试工具之Karma-Jasmine的安装和使用详解
2015/12/03 Javascript
javascript高级选择器querySelector和querySelectorAll全面解析
2016/04/07 Javascript
简单谈谈ES6的六个小特性
2016/11/18 Javascript
利用angular.copy取消变量的双向绑定与解析
2016/11/25 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
canvas绘制万花筒效果(代码分享)
2017/01/20 Javascript
nodejs批量下载图片的实现方法
2017/05/19 NodeJs
bing Map 在vue项目中的使用详解
2018/04/09 Javascript
详解JSON Web Token 入门教程
2018/07/30 Javascript
JavaScript实现数组全排列、去重及求最大值算法示例
2018/07/30 Javascript
vue中使用vue-cli接入融云实现即时通信
2019/04/19 Javascript
用node.js写一个jenkins发版脚本
2019/05/21 Javascript
JS继承定义与使用方法简单示例
2020/02/19 Javascript
vue实现学生信息管理系统
2020/05/30 Javascript
Python过滤函数filter()使用自定义函数过滤序列实例
2014/08/26 Python
初学python的操作难点总结(新手必看篇)
2017/08/03 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
2017/11/03 Python
对python中的try、except、finally 执行顺序详解
2019/02/18 Python
Python学习笔记之列表推导式实例分析
2019/08/13 Python
python模块和包的应用BASE_PATH使用解析
2019/12/14 Python
python实现IOU计算案例
2020/04/12 Python
为什么UNION ALL比UNION快
2016/03/17 面试题
语文教师个人工作总结
2015/02/06 职场文书
2019年二手房买卖合同范本
2019/10/14 职场文书
如何使用PostgreSQL进行中文全文检索
2021/05/27 PostgreSQL
Python人工智能之混合高斯模型运动目标检测详解分析
2021/11/07 Python
Python中npy和mat文件的保存与读取
2022/04/24 Python