ThinkPHP 原生分页功能改进,更好用更美观

作者:神秘网友 发布时间:2021-02-28 10:20:02

ThinkPHP 原生分页功能改进,更好用更美观

编写自定义类

在 thinkphp\library\think\paginator\driver 目录下新建php类文件,如名称为TpPage.php

namespace think\paginator\driver;

use think\Paginator;

class TpPage 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页bnbsp;" . $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(
                    '%sdiv class="pagination"%s %s %s/div',
                    $this-css(),
                    $this-prev(),
                    $this-getLinks(),
                    $this-next()
                );
            } else {
                return sprintf(
                    '%sdiv 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';
    }
}

修改分页配置

在 config 目录下新建paginate.php文件,添加以下内容。

/**
 * 分页配置
 */
return[
    'type' = 'TpPage',
    'list_rows' = 5,
];

效果展示

  至此。转载请注明出处,记得扫码打赏支持哦,谢谢!

ThinkPHP 原生分页功能改进,更好用更美观 相关文章

  1. Vue--element实现会员管理分页

    分页 当数据过多的时候,我们肯定是要实现分页效果的,分页效果在每个列表页都应该存在 我们后台的接口为 http://127.0.0.1:8081/api/manage/search/memberpage=1size=2 其中的page为页码,size为每页显示的条数。请求方法为post 接口数据格式为 { "code": "

  2. PHPStorm 对 ThinkPHP6.0 没有代码提示

    PHPStorm再模型操作ThinkPHP6.0的时候没有代码提示特别的不习惯也不方便 就找到了ThinkPHP5.1里面的代码注释,复制了一遍给到了两个文件 # 以前的最好也不好删 第1步、 第一个找到Model.php 文件路径 vendor\topthink\think-orm\src\Model.php 也可以Ctrl +

  3. 原生js实现call,apply以及bind

    1、实现call 步骤: 将函数设为对象的属性; 指定this到函数,并传入给定参数执行函数; 执行之后删除这个函数; 如果不传入参数,默认指向window; Function.prototype.mycall = function (context, ...args) { //判断是否为函数,如果不是函数,则报错 if

  4. Vue+element ui表格数据显示、分页、搜索、全数据排序、日期范围筛选

    设计思路:1、先从后端获得数据,存入json数组tableData中;2、经筛选处理后的数据存到tableDataEnd里,并在表格中显示;3、element默认的排序只对当前页数据排序,需要重写排序方法,对tableData或tableDataEnd进行排序;4、tableData中的日期数据用字符串

  5. Gdb调试标准容器脚本

    原生Gdb不支持对std容器的元素的显示,可以加载外界脚本实现对Std进行显示 转载http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.03.txt # # STL GDB evaluators/views/utilities - 1.03## The new GDB commands: # are entirely non instrumental

  6. 行业寒冬:2021年展望Android原生开发的现状,大厂面试题汇总

    程序员与别的专业有所不同,其他专业都是越老越香,而程序员却是一个例外,因为计算机技术更新太快,而且工作强度很大,因此大部分程序员只会写 3 年代码。3 年后要不晋升做项目经理,要么转行,个别研究所除外。 在安卓系统中: 当系统内存不足时,Android

  7. table表单打印添加页码和自动分页

    今天接到一个需求,就是打印页面需要自动分页,并且添加分页页码。 查找了很多插件或者文档都没有好的处理方法,所以准备自己写一个函数来处理。 页面样式: 要求:第一个页面添加总体的大表单,第二个页面添加小表单。并且自动分页,添加页码。table列表中

  8. js原生实现三级联动下拉菜单

    js代码: !doctype htmlhtmlheadmeta charset="utf-8"title三级联动/titlestyleselect{ width:150px; height:35px;}/style/headbody select class="sheng" option请选择/option /select span省/span select class="shi" /select span市/span select class="q

  9. vue捕获原生的事件

    当一个div下边有非常多的div或者input等其他组件,比如一个div下有几百个按钮,那么如果每个按钮都写一个click事件的话,会占用大量的内存,导致页面反应缓慢。这种时候就比较适合用原生事件,下面我们来举个例子:用vue如何捕获原生的组件 !DOCTYPE htmlhtm

  10. 【原创】原生dom接口

    window对象 https://developer.mozilla.org/zh-CN/docs/Web/API/Window document //见下方location //https://developer.mozilla.org/zh-CN/docs/Web/API/Location/hrefhistory //操作浏览器会话历史的接口https://developer.mozilla.org/zh-CN/docs/Web/API

每天更新java,php,javaScript,go,python,nodejs,vue,android,mysql等相关技术教程,教程由网友分享而来,欢迎大家分享IT技术教程到本站,帮助自己同时也帮助他人!

Copyright 2020, All Rights Reserved. Powered by 跳墙网(www.tqwba.com)|网站地图|关键词