zoukankan      html  css  js  c++  java
  • thinkphp简洁、美观、靠谱的分页类

    这个分页类是在thinkphp框架内置的分页类的基础上修改而来;
    废话不多说先上图预览下;即本博客的分页;


    这个分页类是在thinkphp框架内置的分页类的基础上修改而来;

    原分页类的一些设计,在实际运用中感觉不是很方便;

    1:只有一页内容时不显示分页;

    2:原分页类在当前页是第一页和最后一页的时候,不显示第一页和最后一页的按钮;


    3:分页数比较少时不显示首页和末页按钮;

    4:包裹分页内容的父级div没有class;

    针对以上问题逐一进行了修改成如下;

    1:如果没有数据不显示分页,如果有一页及以上内容即显示分页;

    2:默认就显示第一页和最后一页按钮,但是在当前页是第一页和最后一页的时候按钮点击无效果;

    3:默认就显示首页和末页按钮;

    4:为包裹分页内容的父级div添加名为page的class;

    5:显示总共查出的内容条数;


    示例环境:thinkphp3.2.3;

    分页类目录:/Thinkphp/Library/Org/Bjy/Page.class.php

    或者目录是:/ThinkPHP/Library/Think/Page.class.php

    分页类代码如下:

    <?php
     // +----------------------------------------------------------------------
     // | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
     // +----------------------------------------------------------------------
     // | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
     // +----------------------------------------------------------------------
     // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
     // +----------------------------------------------------------------------
     // | Author: 麦当苗儿 <zuojiazi@vip.qq.com> <http://www.zjzit.cn>
     // +----------------------------------------------------------------------
     /*
     * PHP分页类
     * 修改者:白俊遥
     * 日  期:2015.5.10
     * 邮  箱:baijunyao@baijunyao.com
     * 博  客:http://www.baijunyao.com
     */
     namespace OrgBjy;
     class Page{
        public $firstRow; // 起始行数
        public $listRows; // 列表每页显示行数
        public $parameter; // 分页跳转时要带的参数
        public $totalRows; // 总行数
        public $totalPages; // 分页总页面数
        public $rollPage   = 5;// 分页栏每页显示的页数
        public $lastSuffix = true; // 最后一页是否显示总页数
        private $p       = 'p'; //分页参数名
        private $url     = ''; //当前链接URL
        private $nowPage = 1;
        // 分页显示定制
        private $config  = array(
            'header' => '<span class="rows">共 %TOTAL_ROW% 条记录</span>',
            'first'   => '首页',
            'prev'   => '上一页',
            'next'   => '下一页',
            'last'   => '末页',
            'theme'  => '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% %HEADER%',
        );
        /**
         * 架构函数
         * @param array $totalRows  总的记录数
         * @param array $listRows  每页显示记录数
         * @param array $parameter  分页跳转的参数
         */
        public function __construct($totalRows, $listRows=20, $parameter = array()) {
            C('VAR_PAGE') && $this->p = C('VAR_PAGE'); //设置分页参数名称
            /* 基础设置 */
            $this->totalRows  = $totalRows; //设置总记录数
            $this->listRows   = $listRows;  //设置每页显示行数
            $this->parameter  = empty($parameter) ? $_GET : $parameter;
            $this->nowPage    = empty($_GET[$this->p]) ? 1 : intval($_GET[$this->p]);
            $this->nowPage    = $this->nowPage>0 ? $this->nowPage : 1;
            $this->firstRow   = $this->listRows * ($this->nowPage - 1);
        }
        /**
         * 定制分页链接设置
         * @param string $name  设置名称
         * @param string $value 设置值
         */
        public function setConfig($name,$value) {
            if(isset($this->config[$name])) {
                $this->config[$name] = $value;
            }
        }
        /**
         * 生成链接URL
         * @param  integer $page 页码
         * @return string
         */
        private function url($page){
            return str_replace(urlencode('[PAGE]'), $page, $this->url);
        }
        /**
         * 组装分页链接
         * @return string
         */
        public function show() {
            if(0 == $this->totalRows) return '';
            /* 生成URL */
            $this->parameter[$this->p] = '[PAGE]';
            $this->url = U(ACTION_NAME, $this->parameter);
            /* 计算分页信息 */
            $this->totalPages = ceil($this->totalRows / $this->listRows); //总页数
            if(!empty($this->totalPages) && $this->nowPage > $this->totalPages) {
                $this->nowPage = $this->totalPages;
            }
            /* 计算分页零时变量 */
            $now_cool_page      = $this->rollPage/2;
            $now_cool_page_ceil = ceil($now_cool_page);
            //上一页
            $up_row  = $this->nowPage - 1;
            $up_page = $up_row > 0 ? '<a class="prev" href="' . $this->url($up_row) . '">' . $this->config['prev'] . '</a>' : '<a class="prev" href="javascript:;">' . $this->config['prev'] . '</a>';
            //下一页
            $down_row  = $this->nowPage + 1;
            $down_page = ($down_row <= $this->totalPages) ? '<a class="next" href="' . $this->url($down_row) . '">' . $this->config['next'] . '</a>' : '<a class="next" href="javascript:;">' . $this->config['next'] . '</a>';
            //第一页
            $the_first = '<a class="first" href="' . $this->url(1) . '">' . $this->config['first'] . '</a>';
            //最后一页
            $the_end = '<a class="end" href="' . $this->url($this->totalPages) . '">' . $this->config['last'] . '</a>';
            //数字连接
            $link_page = "";
            for($i = 1; $i <= $this->rollPage; $i++){
                if(($this->nowPage - $now_cool_page) <= 0 ){
                    $page = $i;
                }elseif(($this->nowPage + $now_cool_page - 1) >= $this->totalPages){
                    $page = $this->totalPages - $this->rollPage + $i;
                }else{
                    $page = $this->nowPage - $now_cool_page_ceil + $i;
                }
                if ($page>0) {
                    if($page != $this->nowPage){
                        if($page <= $this->totalPages){
                            $link_page .= '<a class="num" href="' . $this->url($page) . '">' . $page . '</a>';
                        }else{
                            break;
                        }
                    }else{
                        $link_page .= '<span class="current">' . $page . '</span>';
                    }                
                }
            }
            //替换分页内容
            $page_str = str_replace(
                array('%HEADER%', '%NOW_PAGE%', '%UP_PAGE%', '%DOWN_PAGE%', '%FIRST%', '%LINK_PAGE%', '%END%', '%TOTAL_ROW%', '%TOTAL_PAGE%'),
                array($this->config['header'], $this->nowPage, $up_page, $down_page, $the_first, $link_page, $the_end, $this->totalRows, $this->totalPages),
                $this->config['theme']);
            return '<div class="page">'.$page_str.'</div>';
        }
     }

    分页类调用:

        $count=$this->where($where)->count();
        $page=new OrgBjyPage($count,$limit);
        $list=$this->where($where)->order('addtime desc')->limit($page->firstRow.','.$page->listRows)->select();
        $show=$page->show();

    分页类的使用方法和原thinkphp相同;具体参考:thinkphp手册-数据分页http://document.thinkphp.cn/manual_3_2.html#data_page

    前端需要用<div class="b-page">{$page}</div> 

    分页类样式:

    .b-page {
        background:#fff;
        box-shadow:0 1px 2px 0 #e2e2e2
     }
     .b-page .page {
        width:100%;
        padding:30px 15px;
        background:#fff;
        text-align:center;
        overflow:hidden
     }
     .b-page .page .first,.b-page .page .prev,.b-page .page .current,.b-page .page .num,.b-page .page .current,.b-page .page .next,.b-page .page .end {
        padding:8px 16px;
        margin:0 5px;
        display:inline-block;
        color:#008cba;
        border:1px solid #f2f2f2;
        border-radius:5px
     }
     .b-page .page .first:hover,.b-page .page .prev:hover,.b-page .page .current:hover,.b-page .page .num:hover,.b-page .page .current:hover,.b-page .page .next:hover,.b-page .page .end:hover {
        text-decoration:none;
        background:#f8f5f5
     }
     .b-page .page .current {
        background-color:#008cba;
        color:#fff;
        border-radius:5px;
        border:1px solid #008cba
     }
     .b-page .page .current:hover {
        text-decoration:none;
        background:#008cba
     }
  • 相关阅读:
    UVA 11925 Generating Permutations 生成排列 (序列)
    UVA 1611 Crane 起重机 (子问题)
    UVA 11572 Unique snowflakes (滑窗)
    UVA 177 PaperFolding 折纸痕 (分形,递归)
    UVA 11491 Erasing and Winning 奖品的价值 (贪心)
    UVA1610 PartyGame 聚会游戏(细节题)
    UVA 1149 Bin Packing 装箱(贪心)
    topcpder SRM 664 div2 A,B,C BearCheats , BearPlays equalPiles , BearSorts (映射)
    UVA 1442 Cave 洞穴 (贪心+扫描)
    UVA 1609 Foul Play 不公平竞赛 (构(luan)造(gao)+递归)
  • 原文地址:https://www.cnblogs.com/zc290987034/p/7389339.html
Copyright © 2011-2022 走看看