Think php5.1 增加Layui分页样式 简单详细

首先在tp源码根目录 thinkphp -> library -> paginator -> driver 文件夹内新增 Layui.php 这个类文件

然后复制下面的代码粘贴进去。

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

namespace think\paginator\driver;

use think\Paginator;

class Layui extends Paginator
{

    /**
     * 上一页按钮
     * @param string $text
     * @return string
     */
    protected function getPreviousButton($text = "上一页")
    {

        if ($this->currentPage() <= 1) {
            return $this->getDisabledTextWrapper($text);
        }

        $url = $this->url(
            $this->currentPage() - 1
        );

        return $this->getPageLinkWrapper($url, $text);
    }

    /**
     * 下一页按钮
     * @param string $text
     * @return string
     */
    protected function getNextButton($text = '下一页')
    {
        if (!$this->hasMore) {
            return $this->getDisabledTextWrapper($text);
        }

        $url = $this->url($this->currentPage() + 1);

        return $this->getPageLinkWrapper($url, $text);
    }

    /**
     * 页码按钮
     * @return string
     */
    protected function getLinks()
    {
        if ($this->simple) {
            return '';
        }

        $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(
                    '<div class="pager"><div class="layui-box layui-laypage layui-laypage-default">%s %s</div></div>',
                    $this->getPreviousButton(),
                    $this->getNextButton()
                );
            } else {
                return sprintf(
                    '<div class="pager"><div class="layui-box layui-laypage layui-laypage-default">%s %s %s</div></div>',
                    $this->getPreviousButton(),
                    $this->getLinks(),
                    $this->getNextButton()
                );
            }
        }
    }

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

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

    /**
     * 生成一个激活的按钮
     *
     * @param  string $text
     * @return string
     */
    protected function getActivePageWrapper($text)
    {
        return '<span class="layui-laypage-curr"><em class="layui-laypage-em"></em><em>' . $text . '</em></span>';
    }

    /**
     * 生成省略号按钮
     *
     * @return string
     */
    protected function getDots()
    {
        return '<span class="layui-laypage-spr">…</span>';
    }

    /**
     * 批量生成页码按钮.
     *
     * @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 ($this->currentPage() == $page) {
            return $this->getActivePageWrapper($page);
        }

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

分页样式是:layui2.5.4,tp框架是:tp5.1.37

接着在tp源码根目录config目录下新增配置文件:paginate.php文件内容为

<?php

// +----------------------------------------------------------------------
// | 分页设置
// +----------------------------------------------------------------------

return [
    'type'      =>  'layui',
    'var_page'  =>  'page',
    'list_rows' =>  1,
];

教程就到这里了!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,下面是使用thinkphp5.1layui实现分页的步骤: 1. 安装layuithinkphp5.1 在项目根目录下使用composer安装layuithinkphp5.1: ``` composer require topthink/think:5.1.* -vvv composer require layui/layui ``` 2. 创建控制器和视图文件 在控制器中定义一个方法用于获取数据和渲染视图: ```php namespace app\index\controller; use think\Controller; use think\Db; class Index extends Controller { public function index() { // 获取数据 $list = Db::name('user')->paginate(10); // 渲染视图 $this->assign('list', $list); return $this->fetch(); } } ``` 在视图文件中使用layui分页组件: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>分页演示</title> <link rel="stylesheet" href="/static/layui/css/layui.css"> </head> <body> <div class="layui-container"> <table class="layui-table"> <thead> <tr> <th>ID</th> <th>姓名</th> <th>年龄</th> </tr> </thead> <tbody> {volist name="list" id="vo"} <tr> <td>{$vo.id}</td> <td>{$vo.name}</td> <td>{$vo.age}</td> </tr> {/volist} </tbody> </table> <div id="page"></div> </div> <script src="/static/layui/layui.js"></script> <script> layui.use(['laypage', 'layer'], function(){ var laypage = layui.laypage; var layer = layui.layer; // 初始化分页组件 laypage.render({ elem: 'page', count: {$list.total}, limit: {$list.list_rows}, curr: {$list.current_page}, jump: function(obj, first){ if(!first){ // 点击分页按钮时触发的回调函数 window.location.href = '?page=' + obj.curr; } } }); }); </script> </body> </html> ``` 3. 实现分页功能 在控制器中获取分页数据: ```php namespace app\index\controller; use think\Controller; use think\Db; class Index extends Controller { public function index() { // 获取当前页码 $page = $this->request->get('page', 1); // 获取分页数据 $list = Db::name('user')->paginate(10, false, ['page' => $page]); // 渲染视图 $this->assign('list', $list); return $this->fetch(); } } ``` 在视图文件中根据当前页码显示对应的数据: ```html <tbody> {volist name="list" id="vo"} <tr> <td>{$vo.id}</td> <td>{$vo.name}</td> <td>{$vo.age}</td> </tr> {/volist} </tbody> ``` 然后在分页组件的回调函数中设置跳转链接: ```js jump: function(obj, first){ if(!first){ // 点击分页按钮时触发的回调函数 window.location.href = '?page=' + obj.curr; } } ``` 这样就可以实现使用thinkphp5.1layui实现分页功能了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值