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 相关文章推荐
PHP下用rmdir实现删除目录的三种方法小结
Apr 20 PHP
PHP 采集程序 常用函数
Dec 18 PHP
PHP 页面编码声明方法详解(header或meta)
Mar 12 PHP
php并发对MYSQL造成压力的解决方法
Feb 21 PHP
php计算几分钟前、几小时前、几天前的几个函数、类分享
Apr 09 PHP
Linux中用PHP判断程序运行状态的2个方法
May 04 PHP
PHP实现数组递归转义的方法
Aug 28 PHP
JavaScript实现滚动栏效果的方法
Apr 27 PHP
php动态读取数据清除最右边距的方法
Apr 12 PHP
PHP多维数组指定多字段排序的示例代码
May 16 PHP
php下的原生ajax请求用法实例分析
Feb 28 PHP
PHP dirname简单使用代码实例
Nov 13 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中使用SimpleXML检查XML文件结构实例
2015/01/07 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
php微信公众号开发之图片回复
2018/10/20 PHP
电子商务网站上的常用的js放大镜效果
2011/12/08 Javascript
教你在heroku云平台上部署Node.js应用
2014/07/30 Javascript
node.js中的fs.rmdir方法使用说明
2014/12/16 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
jquery的幻灯片图片切换效果代码分享
2015/09/07 Javascript
AngularJS入门教程之迭代器过滤详解
2016/08/18 Javascript
Javascript中indexOf()和lastIndexOf应用方法实例
2016/08/24 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
JavaScript html5 canvas实现图片上画超链接
2017/10/20 Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
2018/09/13 Javascript
JS滚轮控制图片缩放大小和拖动的实例代码
2018/11/20 Javascript
微信小程序实现左侧滑栏过程解析
2019/08/26 Javascript
layui+SSM的数据表的增删改实例(利用弹框添加、修改)
2019/09/27 Javascript
js滚轮事件 js自定义滚动条的实现
2020/01/18 Javascript
extjs图表绘制之条形图实现方法分析
2020/03/06 Javascript
vue 解决兄弟组件、跨组件深层次的通信操作
2020/07/27 Javascript
用JavaScript实现贪吃蛇游戏
2020/10/23 Javascript
[01:12]DOTA2次级职业联赛 - Newbee.Y 战队宣传片
2014/12/01 DOTA
Python中最常用的操作列表的几种方法归纳
2015/04/24 Python
python之Flask实现简单登录功能的示例代码
2018/12/24 Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
2019/08/24 Python
python爬虫爬取监控教务系统的思路详解
2020/01/08 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
俄罗斯街头服装品牌:Black Star Wear
2017/03/01 全球购物
马来西亚在线药房:RoyalePharma
2019/12/01 全球购物
如何选择使用结构还是类
2014/05/30 面试题
实习生自我评价
2014/01/18 职场文书
优秀学生获奖感言
2014/02/15 职场文书
住宅质量保证书
2014/04/29 职场文书
最美家庭活动方案
2014/08/31 职场文书
国王的演讲观后感
2015/06/03 职场文书
读《瓦尔登湖》有感:每个人都需要一个瓦尔登湖
2019/10/17 职场文书