PHP实现的一分页工具类

2334 次阅读 by 九九 2012-05-01 | 标签:PHP 总结

之前想过一种方法,也就是看情况去一点点的判断,不过很纠结,思想很乱,虽然也成功的做到了一些效果,但不完美,之后就换了一种思维方式:把要想显示的总页数(1 ...  4  5 6 7 8 9 ... 20)中间的看成一个可以滑动的固定长度的尺子,总的页数是一个长度一定的木块,这把尺子在这个木块上滑动,前提,尺子的两端不能超出木块:D。发现这么一来要做的事情就是去找这个尺子在木块上的起始点,根据用户给传进来的page变量。哈哈,关键代码下面:

/**
     * 把中间的看成一个可以滑动的固定长度的尺子 
     * 
     * 把$this->_totalShowPages 当成一个可以滑动的固定长度尺子,
     * 然后$this->_totalPages就是一个给定长度的木块,尺子在这个
     * 木块上滑动。情况两种:
     * 1. 尺子长度大于木块长度,那么就直接输出所有的页码;
     * 2. 尺子长度小于木块长度,那么就只用找到输出这个尺子长度页
     *    数的起始点——$start, $end;
     * 
     * @Access protected
     * @Return void
     * @Exception none
     */
    protected function _getShowPageNumber()
    {
        $pageHtml   = '';
        //找到$start点
        if($this->_curPage - 2 > 1) {
            $start  = $this->_curPage - 2;
        } else {
            $start  = 1;
        }
        //找到$end 点
        $end        = $start + $this->_totalShowPages;
        if($end >= $this->_totalPages) {
            $end    = $this->_totalPages;
            $start  = $end - $this->_totalShowPages;    //保证页面显示的长度为$this->_totalShowPages
        }
        if($start != 1) {
            $pageHtml   .= $this->_getPageHtml(1);
            $preMore    = $this->_curPage - $this->_totalShowPages;
            if($preMore < 1) {
                $preMore    = 1;
            }
            $pageHtml       .= $this->_getMorePageHtml($preMore);
        }
        for($page = $start; $page < $end; $page ++) {
            $pageHtml   .= $this->_getPageHtml($page);
        }
        if($end != $this->_totalPages) {
            $pageHtml   .= $this->_getMorePageHtml($end);
        }
        $pageHtml   .= $this->_getNormalPageHtml($this->_totalPages);

        return $pageHtml;
    }

第一种老想法的代码实现:

/**
     * 一步步的来 
     * 
     * @desc
     * 
     * @Access protected
     * @Return void
     * @Exception none
     */
    protected function _getShowPageNumberTwo()
    {
        if($this->_curPage < $this->_totalShowPages) {
            for($page = 1; $page < $this->_totalShowPages; $page ++) {
                $pageHtml   .= $this->_getPageHtml($page);
            }
            $pageHtml       .= $this->_getMorePageHtml($this->_totalShowPages);
            $pageHtml       .= $this->_getNormalPageHtml($this->_totalPages);
        } else {
            $pageHtml       .= $this->_getNormalPageHtml(1);
            if($this->_curPage == $this->_totalShowPages) {
                $pageHtml       .= $this->_getMorePageHtml(1);
            } else {
                $pageHtml       .= $this->_getMorePageHtml($this->_curPage - $this->_totalShowPages);
            }
            if($this->_curPage + $this->_totalShowPages >= $this->_totalPages) {
                for($page = $this->_totalPages - $this->_totalShowPages; $page < = $this->_totalPages; $page ++) {
                    $pageHtml   .= $this->_getPageHtml($page);
                }
            } else {
                $start  = $this->_curPage - 2;
                $end    = $this->_curPage + $this->_totalShowPages - 2;
                for($page = $start; $page < $end; $page ++) {
                    $pageHtml   .= $this->_getPageHtml($page);
                }
                $pageHtml       .= $this->_getMorePageHtml($this->_curPage + $this->_totalShowPages - 2);
                $pageHtml       .= $this->_getNormalPageHtml($this->_totalPages);
            }
        }

        return $pageHtml; 
    }

示例图:类文件下载:HPage.php (等我这个小类库完成了再一起放上 :D)。


评论(0)

暂无评论!


PS:多打字可以减肥哦~234字以内。支持表情:


Top