`

zend framework 分页

阅读更多


在models下定义Page.php
<?php 

/**
 * 分页工具类
 * @author xxoo
 *
 */
class Page{

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 = "|<<&nbsp;&nbsp;";  //导航栏中第一页显示的字符
    private $_nextPageString = "&nbsp;>>";          //导航栏中前一页显示的字符
    private $_previousPageString = "<<&nbsp;&nbsp;";//导航栏中后一页显示的字符
    private $_lastPageString = "&nbsp;&nbsp;>>|";   //导航栏中最后一页显示的字符
    private $_splitString = "&nbsp;&nbsp;";                  //页数字间的间隔符 /
    public function __construct($itemCount, $pageSize)
    {
        if(!is_numeric($itemCount) || (!is_numeric($pageSize)))throw new Exception("暂无相关数据");
        $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 = '<div style="text-align:'.$this->_align.'">';
        $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.'页&nbsp;&nbsp;';
        if($pageCote > 0) //首页导航
        {
            $navigation .= '<a href="'.$this->createHref(1).'">'.$this->_firstPageString.'</a>';
        }
        if($this->_currentPage != 1)//上一页导航
        {
            $navigation .= '<a href="'.$this->createHref($this->_currentPage-1);
            $navigation .= '">'.$this->_previousPageString.'</a>';
        }
        while ($pageStart <= $pageEnd)//构造数字导航区
        {
            if($pageStart == $this->_currentPage)
            {
                $navigation .= '<strong>'.$pageStart.'</strong>'.$this->_splitString;
            }
            else
            {
                $navigation .= '<a href="'.$this->createHref($pageStart).'">'.$pageStart.'</a>'.$this->_splitString;
            }
            $pageStart++;
        }
        if($this->_currentPage != $this->_pageCount)    //下一页导航
        {
            $navigation .= ' <a href="'.$this->createHref($this->_currentPage+1).'">'.$this->_nextPageString.'</a>';
        }
        if($pageCote < $pageCoteCount-1)                //未页导航
        {
            $navigation .= '<a href="'.$this->createHref($this->_pageCount).'">'.$this->_lastPageString.'</a>';
        }
          //添加直接导航框
        $navigation .= '&nbsp;&nbsp;<select onchange="window.location=\' '.$this->createHref().'\'+this.options[this.selectedIndex].value;">';
        for ($i=1;$i<=$this->_pageCount;$i++){
                if ($this->getCurrentPage()==$i){
                        $selected = "selected";
                }
                else {
                        $selected = "";
                }
                $navigation .= '<option value='.$i.' '.$selected.'>'.$i.'</option>';
        }
        $navigation .= '</select>';
        $navigation .= '</div>';
        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;
    }
}
?>

-------------------------------------------
controllers里面
require_once APPLICATION_PATH.'/models/Page.php';
	//得到用户列表 带查询的分页列表
	public function userlistsAction(){
		try {
			$user = new User();
			//查询参数加入
		 	$where = " 1=1 ";
		 	$name = $this->_request->getParam('name');
		 	$mail = $this->_request->getParam('mail');
		 	$status = $this->_request->getParam('status');
		 	if($name != ""){
		 		$where.=" and name like '%".$name."%' ";
		 		$this->view->searchName = $name;//设置隐藏域 分页使用
		 	}
		 	if($mail != ""){
		 		$where.=" and email like '%".$mail."%' ";
		 		$this->view->searchMail = $mail;
		 	}
		 		
		 	if($status != ""){
		 		$where.=" and status = '".$status."' ";
		 		$this->view->searchStatus = $status;
		 	}
			$rows = $user->fetchAll($where)->count();
			//$rows = $user->getAdapter()->fetchOne("select count(*) from ut_user");
			//$rows = $user->fetchAll()->count(); //查询记录总数
			$rowsPerPage = 20;
			$curPage = 1;
			if($this->_request->getParam('page'))
			{
				$curPage = $this->_request->getParam('page');
			}
			$this->view->userLists = $user->fetchAll($where,null,$rowsPerPage,($curPage-1)*$rowsPerPage)->toArray();
			$pager = new Page($rows,$rowsPerPage);
			$this->view->pagebar = $pager->getNavigation();
		} catch (Exception $e) {
			echo $e;
		}
	
		$this->render('userlists');
	}
-------------
views
 <?php 
      echo $this->pagebar;
 ?>
查询的参数放到隐藏域里面,点击下一页上一页可将参数传到后台

  • 大小: 869 Bytes
分享到:
评论

相关推荐

    zend framework 分页类

    zend framework 分页类,支持多种分页模式,很简单但是很实用

    zendframework 分页实现

    zendframework Zend_Paginator 分页 连接数据库 Zend_Paginator 实现分页 简单 效率高

    zend framework分页

    刚学Zend Framework 感叹其强大的同时却发现其在Web开发中常用到的如分页,上传,字符串处理等等却没有实现,今天小试牛刀,给Zend Framework扩展了一个分页类。

    Zend Framework分页类用法详解

    主要介绍了Zend Framework分页类用法,结合实例形式详细分析了Zend Framework分页类的实现代码,相关功能与使用技巧,需要的朋友可以参考下

    非常好用的Zend Framework分页类

    在这里和大家分享一个非常好用的 Zend Framework 分页类   具体效果可见本站的分页效果, CSS样式可根据个人设计感进行更变。   这里我会举例演示如何使用该类, 如下:   IndexController.php, 在 Action 中写入...

    zendframework留言分页

    zendframework留言分页 mysql 数据库 利用里面的分页类

    zendframework 增加,删除,更新,图片上传,分页

    zend framework简单的操作,增加,删除,更新,图片上传,分页

    php zendframework 常用代码

    php zendframework 包括连接数据库 分页 以及其他的一些常用代码

    Zend Framework框架实现类似Google搜索分页效果

    主要介绍了Zend Framework框架实现类似Google搜索分页效果,结合实例形式分析了Zend Framework框架实现分页效果所涉及的基本查询、判断与分页效果构造相关操作技巧,需要的朋友可以参考下

    Zend Framework实现留言本分页功能(附demo源码下载)

    主要介绍了Zend Framework实现留言本分页功能,详细分析了Zend Framework实现留言本所涉及的控制器动作,分页样式及模板调用技巧,并附代码demo源码供读者下载参考,需要的朋友可以参考下

    咸鱼sns v1.02 正式版.zip

    咸鱼sns是采用zendframework1.1开发的sns网站,在zendframework的基础上,删除框架不需要的功能,代码容量大大简化,对框架配置文件进行缓存,网站速度大步提升, 网站包括主题站,小组,问答等功能,支持qq登录。

    咸鱼sns v1.01

    采用zendframework1.1 开发的sns网站.包含主题站,小组,问答,视频等模块,支持qq登录安装方法:下载代码,uploads目录就是网站所有文件 直接放到目录 新建虚拟主机,运行http//127.0.0.1/yu180sns/uploads安装后台...

    PHP 分页类(模仿google)-面试题目解答

    今天去XX公司面试了,感觉很不理想。因为这一段时间都在加深Zend Framework,都没练习常用函数和方法了。

    咸鱼sns 1.02 正式版

    咸鱼sns是采用zendframework1.1开发的sns网站,在zendframework的基础上,删除框架不需要的功能,代码容量大大简化,对框架配置文件进行缓存,网站速度大步提升, 网站包括主题站,小组,问答等功能,支持qq登录。...

    php咸鱼sns正式版v1.01

    采用zendframework1.1 开发的sns网站.包含主题站,小组,问答,视频等模块,支持qq登录 安装方法: 下载代码,uploads目录就是网站所有文件 直接放到目录 新建虚拟主机,运行//您的域名 或者直接运行//127.0.0.1/yu180...

    mq-util:ZF2 Viewhelpers

    Zend Framework 2 View助手less()将LESS文件转换为CSS js()检索版本化的js文件dateFormat()用于以多种不同的格式格式化日期percent()以快速计算百分比MQUtil \ Collector \ Milq ZendDeveloperTools收集器...

Global site tag (gtag.js) - Google Analytics