博主用的是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;
}
效果如下: