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;
}

效果如下:

相关推荐
Mintopia2 分钟前
轻量化AIGC模型在移动端Web应用的适配技术
前端·javascript·aigc
Mintopia2 分钟前
Next.js CI/CD 基础(GitHub Actions)
前端·javascript·next.js
RTC老炮6 分钟前
webrtc弱网-AlrDetector类源码分析与算法原理
服务器·网络·算法·php·webrtc
小朋友,你是否有很多问号?1 小时前
Spark10- RDD转DataFrame的三种方式
大数据·javascript·spark
Wiktok1 小时前
pureadmin的动态路由和静态路由
前端·vue3·pureadmin
devii661 小时前
html.
前端
掘金安东尼1 小时前
为什么浏览器要限制 JavaScript 定时器?
前端·javascript·github
学前端搞口饭吃1 小时前
react context如何使用
前端·javascript·react.js
GDAL2 小时前
为什么Cesium不使用vue或者react,而是 保留 Knockout
前端·vue.js·react.js
wheeldown2 小时前
【Linux】面试常考!Linux 进程核心考点:写时拷贝优化原理 + 进程等待实战,一篇理清进程一生
linux·运维·服务器·面试·php