thinkphp6使用layui分页组件做分页效果

发布于:2024-05-06 ⋅ 阅读:(26) ⋅ 点赞:(0)

博主用的是layui2.9.8的版本,但这个版本的分页组件是动态效果的,但我需要的是静态分页,所以我自己封装了一个生成layui的分页代码生成代码。代码如下:

1、先创建文件,路径是extent/layui/LayuiPage.php,加入下面代码,样式代码可以根据自己使用的layui版本自己修改

<?php
declare (strict_types = 1);

namespace layui;

class LayuiPage
{
    /**
     * @description:指定分类列表
     * @param: $total数据总数
     * @Author: wangze
     * @Date 2024/4/25
     */
    public function page($total){
        $pagination = [];
        $page = getPage();//当前页
        $limit = getLimit();//每页数量

        //计算总页数
        $totalPages = (int)ceil($total / $limit);

        //页面数小于等于1,不显示分页
        if($totalPages <= 1)return '';

        // 如果总页数小于等于10,直接显示所有页码
        if ($totalPages <= 10) {
            for ($i = 1; $i <= $totalPages; $i++) {
                $pagination[] = $i;
            }
        }
        // 否则根据当前页数选择合适的显示方式
        else {
            // 根据当前页数确定 '...' 的位置
            if ($page <= 6) {
                for ($i = 1;$i <= 7; $i++) {
                    $pagination[] = $i;
                }
                $pagination[] = '...';
                $pagination[] = $totalPages;
            } elseif ($page >= $totalPages - 5) {
                $pagination[] = 1;
                $pagination[] ='...';
                for ($i = $totalPages - 6; $i <= $totalPages; $i++) {
                    $pagination[] = $i;
                }
            } else {
                $pagination[] = 1;
                $pagination[] = '...';
                for ($i = $page -2; $i <= $page + 2; $i++) {
                    $pagination[] = $i;
                }
                $pagination[] = '...';
                $pagination[] = $totalPages;
            }
        }

        $last_page = $page - 1 <= 0 ? 0 : $page - 1;//上一页
        $next_page = $page + 1 <= $total ? $page + 1 : null;//下一页

        $html = '<div class="layui-box layui-laypage layui-laypage-molv" id="layui-laypage-18">';
        if($last_page <= 0){
            $html .= '<a class="layui-laypage-prev layui-disabled" data-page="' . $last_page . '">上一页</a>';
        }else{
            $html .= '<a href="' . $this->handleParam($last_page) . '" class="layui-laypage-prev" data-page="' . $last_page . '">上一页</a>';
        }


        foreach ($pagination as $v){
            if($v == $page){
                $html .= '<span class="layui-laypage-curr">
                        <em class="layui-laypage-em" style="background-color:#1E9FFF;"></em>
                        <em>' . $v . '</em>
                    </span>';
            }else if($v == '...'){
                $html .= '<span class="layui-laypage-spr">...</span>';
            }else{
                $html .= '<a href="' . $this->handleParam($v) . '" data-page="' . $v . '">' . $v . '</a>';
            }
        }

        if($next_page > $totalPages){
            $html .= '<a class="layui-laypage-next layui-disabled" data-page="' . $next_page . '">下一页</a>';
        }else{
            $html .= '<a href="' . $this->handleParam($next_page) . '" class="layui-laypage-next" data-page="' . $next_page . '">下一页</a>';
        }


        return $html;
    }

    /**
     * @description: 分页参数处理
     * @param: {$page:分页数}
     * @Author: wangze
     * @Date 2024/5/6
     */
    protected function handleParam($page){
        $param = request()->param();

        $get = [];
        foreach($param as $k=>$v){
            $get[$k] = $v;
        }

        $get['page'] = $page;

        $gets = '';
        foreach($get as $gk=>$gv){
            if(empty($gets)){
                $gets .= '?' . $gk . '=' . $gv;
            }else{
                $gets .= '&' . $gk . '=' . $gv;
            }
        }

        return $gets;
    }
}

2、注意:其中有2个方法,由于我多个接口会需要获取分页数和分页数量,所以在app/common.php文件中进行封装,可以根据自己的需求封装或者直接外部引入分页参数也可以。

$page = getPage();//当前页
$limit = getLimit();//每页数量

这2个方法是写在app/common.php文件中的,代码如下

/**
 * @description: 获取当前分页数
 */
function getPage(){
    $page = input('page');
    if(empty($page) || $page <= 0)$page = 1;

    $page = (int)$page;

    return $page;
}

/**
 * @description: 获取当前分页数量
 */
function getLimit(){
    $limit = input('limit');
    if(empty($limit) || $limit <= 0)$limit = 20;

    $limit = (int)$limit;

    return $limit;
}

3、引用方法,下面是因为我又在common.php中封装了公共方法,可根据使用自行去封装

function layuiPage($total) {
    $ext = new \layui\LayuiPage();
    $res = $ext->page($total);

    return $res;
}

效果如下:
在这里插入图片描述