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

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

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

bash 复制代码
<?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>';
        }
		
		$html = '</div>';

        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文件中进行封装,可以根据自己的需求封装或者直接外部引入分页参数也可以。

bash 复制代码
$page = getPage();//当前页
$limit = getLimit();//每页数量

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

bash 复制代码
/**
 * @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中封装了公共方法,可根据使用自行去封装

bash 复制代码
function layuiPage($total) {
    $ext = new \layui\LayuiPage();
    $res = $ext->page($total);

    return $res;
}

效果如下:

相关推荐
前端大卫3 小时前
Vue3 + Element-Plus 自定义虚拟表格滚动实现方案【附源码】
前端
却尘3 小时前
Next.js 请求最佳实践 - vercel 2026一月发布指南
前端·react.js·next.js
ccnocare3 小时前
浅浅看一下设计模式
前端
Lee川3 小时前
🎬 从标签到屏幕:揭秘现代网页构建与适配之道
前端·面试
Ticnix4 小时前
ECharts初始化、销毁、resize 适配组件封装(含完整封装代码)
前端·echarts
纯爱掌门人4 小时前
终焉轮回里,藏着 AI 与人类的答案
前端·人工智能·aigc
twl4 小时前
OpenClaw 深度技术解析
前端
崔庆才丨静觅4 小时前
比官方便宜一半以上!Grok API 申请及使用
前端
星光不问赶路人4 小时前
vue3使用jsx语法详解
前端·vue.js
天蓝色的鱼鱼4 小时前
shadcn/ui,给你一个真正可控的UI组件库
前端