[ZendFramework] zend framework 的分页实例代码

2012年4月2日 发表评论 阅读评论

目录结构是跟zend framework的标准建的。此处就省略了。如果有疑问。可以跟贴,我会关注解答的。
转载请注明出处:web开发站长站
分页类:(我是放在../library/下的)
PageClass.php<?php

class PageClass

{

    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 = ‘<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}页\n";

        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 .= ‘<input type="text" size="3" onkeydown="if(event.keyCode==13){window.location=\’ ‘;

        //$navigation .= $this->createHref().’\'+this.value;return false;}" />’;

        //2008年8月27号补充输入非正确页码后出现的错误——begin

        $navigation .= ‘ <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>’;

        //2008年8月27号补充输入非正确页码后出现的错误——end

        $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;

    }

}

?>
复制代码调用实例代码:
我是在IndexController.php 控制器中用的。在列表方法里。function indexAction() {

                $this->view->title = ‘留言列表’;

                $lybs = new Lybs();

                $order = ‘uptime DESC’;

                $rows = $lybs->fetchAll()->count();         //查询记录总数

                $rowsPerPage = 5;    //perPage recordes

                $curPage = 1;

                if($this->_request->getParam(‘page’)) {

                   $curPage = $this->_request->getParam(‘page’);

                }

                //search data and display

                $this->view->lybs = $lybs->fetchAll($where = null, $order,$rowsPerPage,($curPage-1)*$rowsPerPage);

                $Pager = new PageClass($rows,$rowsPerPage);

                $this->view->pagebar = $Pager->getNavigation();               

        }
复制代码效果图:

本篇文章来源于 – http://www.itokit.com – web开发技术 原文地址是:http://www.itokit.com/bbs/viewthread.php?tid=8931&extra=page%3D1


转载请注明来自:[MSN Spaces]http://msn.shandian.biz/231.html

  1. 本文目前尚无任何评论.