ThinkPHP中如何使用Layui分页


TP中默认是使用Bootstrap进行分页的,那么ThinkPHP中如何使用Layui样式进行分页显示?

1、在需要使用到的模块的配置文件夹(config)中,添加paginate.php文件

paginate.php文件配置的具体内容:

<?php
return [
//type指的是,分页处理文件具体目录,也就是分页文件的namespace加上分页文件的类名,这里Layui就是分页文件的类名
    'type'      => '\\plugins\\paginate\\paginator\\Layui',
//var_page指的是,分页数据在模板文件中调用时使用的分页变量
    'var_page'  => 'page',
//list_rows指的是,每页的数量
    'list_rows' => 15,
];

2、分页文件Layui.php配置的具体内容:

<?php
namespace plugins\paginate\paginator;
use think\Paginator;
class Layui extends Paginator
{
    /**
     * 上一页按钮
     * @param string $text
     * @return string
     */
    protected function getPreviousButton($text = "")
    {
        if (empty($text)) {
            if (empty($this->options['prev'])) {
                $text = "&laquo;";
            } else {
                $text = $this->options['prev'];
            }
        }
        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 (empty($text)) {
            if (empty($this->options['next'])) {
                $text = "&raquo;";
            } else {
                $text = $this->options['next'];
            }
        }
        if (!$this->hasMore) {
            return $this->getDisabledTextWrapper($text);
        }
        $url = $this->url($this->currentPage() + 1);
        return $this->getPageLinkWrapper($url, $text);
    }
    /**
     * 上一页按钮
     * @param string $text
     * @return string
     */
    protected function getSimplePreviousButton($text = "")
    {
        if (empty($text)) {
            if (empty($this->options['prev'])) {
                $text = "&larr;";
            } else {
                $text = $this->options['prev'];
            }
            if (!empty($this->options['simple_prev'])) {
                $text = $this->options['simple_prev'];
            }
        }
        $nowpage=$this->currentPage() - 1;
        if ($this->currentPage() <= 1) {
            return '<a href="javascript:;" class="layui-laypage-prev layui-disabled" data-page="0">' . $text . '</a>';
        }
        $url = $this->url(
            $this->currentPage() - 1
        );
        return '<a href="' . htmlentities($url) . '" class="layui-laypage-prev"  data-page="'.$nowpage.'">' . $text . '</a>';
    }
    /**
     * 下一页按钮
     * @param string $text
     * @return string
     */
    protected function getSimpleNextButton($text = '')
    {
        if (empty($text)) {
            if (empty($this->options['next'])) {
                $text = "&rarr;";
            } else {
                $text = $this->options['next'];
            }
            if (!empty($this->options['simple_next'])) {
                $text = $this->options['simple_next'];
            }
        }
        $nowpage=$this->currentPage() + 1;
        if (!$this->hasMore) {
            return '<a href="javascript:;" class="layui-laypage-next layui-disabled" data-page="'.$nowpage.'">' . $text . '</a>';
        }
        $url = $this->url($this->currentPage() + 1);
        return '<a href="' . htmlentities($url) . '" class="layui-laypage-next"  data-page="'.$nowpage.'">' . $text . '</a>';
    }
    /**
     * 页码按钮
     * @return string
     */
    protected function getLinks()
    {
        if ($this->simple)
            return '';
        $block = [
            'first'  => null,
            'slider' => null,
            'last'   => null
        ];
        $side   = 2;
        $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 + 0), $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()) {
            $request = request();
            if ($this->simple || $request->isMobile()) {
                return sprintf(
                    '%s %s',
                    $this->getSimplePreviousButton(),
                    $this->getSimpleNextButton()
                );
            } else {
                return sprintf(
                    '%s %s %s',
                    $this->getPreviousButton(),
                    $this->getLinks(),
                    $this->getNextButton()
                );
            }
        }
    }
    /**
     * 生成一个可点击的按钮
     *
     * @param  string $url
     * @param  int $page
     * @return string
     */
    protected function getAvailablePageWrapper($url, $page)
    {
        return '<a href="' . htmlentities($url) . '" data-page="'.$page.'">'.$page.'</a>';
    }
    /**
     * 生成一个禁用的按钮
     *
     * @param  string $text
     * @return string
     */
    protected function getDisabledTextWrapper($text)
    {
        return '<span class="layui-laypage-spr">'.$text.'</span>';
    }
    /**
     * 生成一个激活的按钮
     *
     * @param  string $text
     * @return string
     */
    protected function getActivePageWrapper($text)
    {
        return '<span class="layui-laypage-curr"><em class="layui-laypage-em" style="background-color:#1E9FFF;"></em><em>'.$text.'</em></span>';
    }
    /**
     * 生成省略号按钮
     *
     * @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);
    }
}

3、模板中的如何使用Layui分页

具体使用如下:

<ul class="layui-box layui-laypage layui-laypage-molv">
    <page/>
</ul>

4、效果图

image.png


点赞(0

上一篇: uni-app页面传值

下一篇: 关于ini_set(): a session is active. you cannot change the session module's ini settings at this time的解决办法

本文标签: #Layui #ThinkPHP #thinkcmf

版权声明: 若无特殊注明,本文皆为原创,转载请注明出处。

发布时间: 2020-02-08 15:30

点击总数: 1237

本文作者:97


请登陆后在进行评论


    点击登陆


    文章
    15
    评论
    14
    用户
    43