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 &amp;&amp; 逻辑与运算符使用说明
Mar 04 PHP
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
May 07 PHP
php设计模式 Template (模板模式)
Jun 26 PHP
phplot生成图片类用法详解
Jan 06 PHP
PHP实现采集抓取淘宝网单个商品信息
Jan 08 PHP
PHP中使用Imagick操作PSD文件实例
Jan 26 PHP
php类中的$this,static,final,const,self这几个关键字使用方法
Dec 14 PHP
yii2中添加验证码的实现方法
Jan 09 PHP
PHP编写RESTful接口的方法
Feb 21 PHP
Laravel学习教程之路由模块
Aug 18 PHP
PHP模型Model类封装数据库操作示例
Mar 14 PHP
PHP二维索引数组的遍历实例分析【2种方式】
Jun 24 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
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
Content-type 的说明
2006/10/09 PHP
IP攻击升级,程序改进以对付新的攻击
2010/11/23 PHP
php绘图之在图片上写中文和英文的方法
2015/01/24 PHP
根据分辨率不同,调用不同的css文件
2006/07/07 Javascript
Javascript MD4
2006/12/20 Javascript
jquery 插件实现图片延迟加载效果代码
2010/02/06 Javascript
javascript实现的DES加密示例
2013/10/30 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
2013/12/04 Javascript
jquery教程限制文本框只能输入数字和小数点示例分享
2014/01/13 Javascript
学习JavaScript设计模式(策略模式)
2015/11/26 Javascript
js时间戳转为日期格式的方法
2015/12/28 Javascript
jQuery无刷新上传之uploadify3.1简单使用
2016/06/18 Javascript
JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
2016/08/02 Javascript
jQuery居中元素scrollleft计算方法示例
2017/01/16 Javascript
babel基本使用详解
2017/02/17 Javascript
微信小程序 数据遍历的实现
2017/04/05 Javascript
详解Angular2 之 结构型指令
2017/06/21 Javascript
vue获取DOM元素并设置属性的两种实现方法
2017/09/30 Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
2017/12/19 Javascript
vue-cli脚手架-bulid下的配置文件
2018/03/27 Javascript
Vue自定义多选组件使用详解
2020/09/08 Javascript
python使用wxPython打开并播放wav文件的方法
2015/04/24 Python
Python使用遗传算法解决最大流问题
2018/01/29 Python
好的Python培训机构应该具备哪些条件
2018/05/23 Python
python寻找list中最大值、最小值并返回其所在位置的方法
2018/06/27 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
python 实现保存最新的三份文件,其余的都删掉
2019/12/22 Python
python 使用事件对象asyncio.Event来同步协程的操作
2020/05/04 Python
Python 实现二叉查找树的示例代码
2020/12/21 Python
享受加州生活方式的时尚舒适:XCVI
2018/07/09 全球购物
商场中秋节活动方案
2014/02/07 职场文书
银行先进个人事迹材料
2014/05/11 职场文书
2014年保洁员工作总结
2014/11/19 职场文书
年会邀请函范文
2015/01/30 职场文书
春节晚会开场白
2015/05/29 职场文书