博主用的是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>';}$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文件中进行封装,可以根据自己的需求封装或者直接外部引入分页参数也可以。
$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;
}
效果如下: