关闭

ThinkPHP5 自定义分页教程

标签: 分页tinkphp5tp5自定义分页教程
1422人阅读 评论(3) 收藏 举报
分类:

先看效果


第一步:首先是分页类 把该类放到extend\page目录下

<?php
namespace page;
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2017 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: zhangyajun <448901948@qq.com>
// +----------------------------------------------------------------------

use think\Paginator;

class Page extends Paginator
{

    //首页
    protected function home() {
        if ($this->currentPage() > 1) {
            return "<a href='" . $this->url(1) . "' title='首页'>首页</a>";
        } else {
            return "<p>首页</p>";
        }
    }

    //上一页
    protected function prev() {
        if ($this->currentPage() > 1) {
            return "<a href='" . $this->url($this->currentPage - 1) . "' title='上一页'>上一页</a>";
        } else {
            return "<p>上一页</p>";
        }
    }

    //下一页
    protected function next() {
        if ($this->hasMore) {
            return "<a href='" . $this->url($this->currentPage + 1) . "' title='下一页'>下一页</a>";
        } else {
            return"<p>下一页</p>";
        }
    }

    //尾页
    protected function last() {
        if ($this->hasMore) {
            return "<a href='" . $this->url($this->lastPage) . "' title='尾页'>尾页</a>";
        } else {
            return "<p>尾页</p>";
        }
    }

    //统计信息
    protected function info(){
        return "<p class='pageRemark'>共<b>" . $this->lastPage .
            "</b>页<b>" . $this->total . "</b>条数据</p>";
    }

    /**
     * 页码按钮
     * @return string
     */
    protected function getLinks()
    {

        $block = [
            'first'  => null,
            'slider' => null,
            'last'   => null
        ];

        $side   = 3;
        $window = $side * 2;

        if ($this->lastPage < $window + 6) {
            $block['first'] = $this->getUrlRange(1, $this->lastPage);
        } elseif ($this->currentPage <= $window) {
            $block['first'] = $this->getUrlRange(1, $window + 2);
            $block['last']  = $this->getUrlRange($this->lastPage - 1, $this->lastPage);
        } elseif ($this->currentPage > ($this->lastPage - $window)) {
            $block['first'] = $this->getUrlRange(1, 2);
            $block['last']  = $this->getUrlRange($this->lastPage - ($window + 2), $this->lastPage);
        } else {
            $block['first']  = $this->getUrlRange(1, 2);
            $block['slider'] = $this->getUrlRange($this->currentPage - $side, $this->currentPage + $side);
            $block['last']   = $this->getUrlRange($this->lastPage - 1, $this->lastPage);
        }

        $html = '';

        if (is_array($block['first'])) {
            $html .= $this->getUrlLinks($block['first']);
        }

        if (is_array($block['slider'])) {
            $html .= $this->getDots();
            $html .= $this->getUrlLinks($block['slider']);
        }

        if (is_array($block['last'])) {
            $html .= $this->getDots();
            $html .= $this->getUrlLinks($block['last']);
        }

        return $html;
    }

    /**
     * 渲染分页html
     * @return mixed
     */
    public function render()
    {
        if ($this->hasPages()) {
            if ($this->simple) {
                return sprintf(
                    '%s<div class="pagination">%s %s %s</div>',
                    $this->css(),
                    $this->prev(),
                    $this->getLinks(),
                    $this->next()
                );
            } else {
                return sprintf(
                    '%s<div class="pagination">%s %s %s %s %s %s</div>',
                    $this->css(),
                    $this->home(),
                    $this->prev(),
                    $this->getLinks(),
                    $this->next(),
                    $this->last(),
                    $this->info()
                );
            }
        }
    }

    /**
     * 生成一个可点击的按钮
     *
     * @param  string $url
     * @param  int    $page
     * @return string
     */
    protected function getAvailablePageWrapper($url, $page)
    {
        return '<a href="' . htmlentities($url) . '" title="第"'. $page .'"页" >' . $page . '</a>';
    }

    /**
     * 生成一个禁用的按钮
     *
     * @param  string $text
     * @return string
     */
    protected function getDisabledTextWrapper($text)
    {
        return '<p class="pageEllipsis">' . $text . '</p>';
    }

    /**
     * 生成一个激活的按钮
     *
     * @param  string $text
     * @return string
     */
    protected function getActivePageWrapper($text)
    {
        return '<a href="" class="cur">' . $text . '</a>';
    }

    /**
     * 生成省略号按钮
     *
     * @return string
     */
    protected function getDots()
    {
        return $this->getDisabledTextWrapper('...');
    }

    /**
     * 批量生成页码按钮.
     *
     * @param  array $urls
     * @return string
     */
    protected function getUrlLinks(array $urls)
    {
        $html = '';

        foreach ($urls as $page => $url) {
            $html .= $this->getPageLinkWrapper($url, $page);
        }

        return $html;
    }

    /**
     * 生成普通页码按钮
     *
     * @param  string $url
     * @param  int    $page
     * @return string
     */
    protected function getPageLinkWrapper($url, $page)
    {
        if ($page == $this->currentPage()) {
            return $this->getActivePageWrapper($page);
        }

        return $this->getAvailablePageWrapper($url, $page);
    }

    /**
     * 分页样式
     */
    protected function css(){
        return '  <style type="text/css">
            .pagination p{
                margin:0;
                cursor:pointer
            }
            .pagination{
                height:40px;
                padding:20px 0px;
            }
            .pagination a{
                display:block;
                float:left;
                margin-right:10px;
                padding:2px 12px;
                height:24px;
                border:1px #cccccc solid;
                background:#fff;
                text-decoration:none;
                color:#808080;
                font-size:12px;
                line-height:24px;
            }
            .pagination a:hover{
                color:#077ee3;
                background: white;
                border:1px #077ee3 solid;
            }
            .pagination a.cur{
                border:none;
                background:#077ee3;
                color:#fff;
            }
            .pagination p{
                float:left;
                padding:2px 12px;
                font-size:12px;
                height:24px;
                line-height:24px;
                color:#bbb;
                border:1px #ccc solid;
                background:#fcfcfc;
                margin-right:8px;

            }
            .pagination p.pageRemark{
                border-style:none;
                background:none;
                margin-right:0px;
                padding:4px 0px;
                color:#666;
            }
            .pagination p.pageRemark b{
                color:red;
            }
            .pagination p.pageEllipsis{
                border-style:none;
                background:none;
                padding:4px 0px;
                color:#808080;
            }
            .dates li {font-size: 14px;margin:20px 0}
            .dates li span{float:right}
        </style>';
    }
}

第二步:修改配置文件

 //分页配置
    'paginate'               => [
        'type'      => 'page\Page',//分页类
        'var_page'  => 'page',
        'list_rows' => 15,
    ],

后面步骤就不说了,不知道的请查阅tinkphp官方分页文档。


0
0
查看评论

thinkPHP5 使用laypage分页插件实现列表分页功能

thinkPHP5 使用laypage分页插件实现列表分页功能         一、背景        在使用thinkPHP框架做项目的时候,经常会遇到对列表的...
  • xiangguiwang
  • xiangguiwang
  • 2017-01-23 18:27
  • 2885

[php] Thinkphp分页配置及分页样式

一、分页配置$Page = new \Think\Page($count, 10); $Page->setConfig('header','<span class="total">共<b>%TOTAL_ROW%</b&g...
  • u010081689
  • u010081689
  • 2015-06-01 17:15
  • 2901

thinkphp5 优美的分页样式

namespace think\paginator\driver; // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK...
  • MyDream229
  • MyDream229
  • 2017-12-24 10:51
  • 176

thinkphp的分页格式自定义

public function index(){         header('Content-Type:text/html;charset=utf-8 '); $M = M("Constant");   ...
  • qq1355541448
  • qq1355541448
  • 2014-04-29 15:54
  • 5067

thinkphp5 分页带参数的解决办法

文档有说可以在paginate带参数,然后研究了下,大概就是这样的: $list=Db::name('member') ->where('member_name|member_mobile|sex','like',...
  • ylwsn21
  • ylwsn21
  • 2017-08-02 15:21
  • 1180

Thinkphp5 数据分页显示

使用Thinkphp5实现分析很是简便。 具体请参考官方文档:   http://www.kancloud.cn/manual/thinkphp5/154294 1.  使用Query.php的paginate 接口获取数据内容,通过render接口获取渲染内容 thi...
  • tww85
  • tww85
  • 2016-10-25 15:21
  • 7664

thinkphp5分页

如开发手册所示,paginate不能加select,所以得到的是一个类,并不是数组,这个时候想对内部的数据进行修改操作时,就遇到了问题 所幸已经解决了,代码如下所示 $suggestion=Db::table('suggestion')->order('create...
  • less_cold
  • less_cold
  • 2017-06-10 13:48
  • 273

thinkphp5 ajax分页

最近一个页面的选项卡又牵扯到ajax分页,所以研究了一下tp5的ajax分页使用方法 首先看一下tp5的分页功能介绍 参数 描述 list_rows 每页数量 page 当前页 path url路径 query url额外...
  • myarche
  • myarche
  • 2017-12-25 10:59
  • 259

thinkphp5的paginator实现数组的分页查询

thinkphp5实现数组分页浏览!
  • Dangdangcyuyan
  • Dangdangcyuyan
  • 2017-12-29 15:34
  • 109

thinkPHP5 分页查询

controller文件内Admin.php <?php namespace app\admin\controller; use think\Controller; use app\admin\model\Admin as AdminModel; //使用分页类 取别名解决类名冲突 class...
  • guohao326
  • guohao326
  • 2017-10-11 23:05
  • 175
    个人资料
    • 访问:329822次
    • 积分:5489
    • 等级:
    • 排名:第5809名
    • 原创:257篇
    • 转载:11篇
    • 译文:0篇
    • 评论:55条
    微信公众号
    微信公众号
    技术博客交流群
    博客技术交流群
    想要源码加群,群文件里下载
    私信不能及时回复,进群@群主
    个人中心
    博客专栏
    文章分类
    最新评论