ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 分页实现 | 版本 | 新增功能 | | --- | --- | | 5.0.5 | 分页方法返回`think\Paginator`对象(用法不变) | | 5.0.1 | 支持第二个参数直接传入总记录数 | `ThinkPHP5.0`内置了分页实现,要给数据添加分页输出功能在`5.0`变得非常简单,可以直接在`Db`类查询的时候调用`paginate`方法: ~~~ // 查询状态为1的用户数据 并且每页显示10条数据 $list = Db::name('user')->where('status',1)->paginate(10); // 把分页数据赋值给模板变量list $this->assign('list', $list); // 渲染模板输出 return $this->fetch(); ~~~ 也可以改成模型的分页查询代码: ~~~ // 查询状态为1的用户数据 并且每页显示10条数据 $list = User::where('status',1)->paginate(10); // 把分页数据赋值给模板变量list $this->assign('list', $list); // 渲染模板输出 return $this->fetch(); ~~~ 模板文件中分页输出代码如下: ~~~ <div> <ul> {volist name='list' id='user'} <li> {$user.nickname}</li> {/volist} </ul> </div> {$list->render()} ~~~ 也可以单独赋值分页输出的模板变量 ~~~ // 查询状态为1的用户数据 并且每页显示10条数据 $list = User::where('status',1)->paginate(10); // 获取分页显示 $page = $list->render(); // 模板变量赋值 $this->assign('list', $list); $this->assign('page', $page); // 渲染模板输出 return $this->fetch(); ~~~ 模板文件中分页输出代码如下: ~~~ <div> <ul> {volist name='list' id='user'} <li> {$user.nickname}</li> {/volist} </ul> </div> {$page} ~~~ 默认情况下,生成的分页输出是完整分页功能,带总分页数据和上下页码,分页样式只需要通过样式修改即可,完整分页默认生成的分页输出代码为: ~~~ <ul class="pagination"> <li><a href="?page=1">&laquo;</a></li> <li><a href="?page=1">1</a></li> <li class="active"><span>2</span></li> <li class="disabled"><span>&raquo;</span></li> </ul> ~~~ ### 传入总记录数(`V5.0.1`) `V5.0.1`版本开始,支持传入总记录数而不会自动进行总数计算,例如: ~~~ // 查询状态为1的用户数据 并且每页显示10条数据 总记录数为1000 $list = User::where('status',1)->paginate(10,1000); // 获取分页显示 $page = $list->render(); // 模板变量赋值 $this->assign('list', $list); $this->assign('page', $page); // 渲染模板输出 return $this->fetch(); ~~~ ### 分页后数据处理 (`V5.0.9`) `V5.0.9`版本开始 支持分页类后数据直接`each`遍历处理,方便修改分页后的数据,而不是只能通过模型的获取器来补充字段。 ~~~ $list = User::where('status',1)->paginate()->each(function($item, $key){ $item->nickname = 'think'; }); ~~~ 如果是Db类操作分页数据的话,each方法的闭包函数中需要使用返回值,例如: ~~~ $list = Db::name('user')->where('status',1)->paginate()->each(function($item, $key){ $item['nickname'] = 'think'; return $item; }); ~~~ ## 简洁分页 如果你仅仅需要输出一个 仅仅只有上下页的分页输出,可以使用下面的简洁分页代码: ~~~ // 查询状态为1的用户数据 并且每页显示10条数据 $list = User::where('status',1)->paginate(10,true); // 把分页数据赋值给模板变量list $this->assign('list', $list); // 渲染模板输出 return $this->fetch(); ~~~ 简洁分页模式的输出代码为: ~~~ <ul class="pager"> <li><a href="?page=1">&laquo;</a></li> <li class="disabled"><span>&raquo;</span></li> </ul> ~~~ > 由于简洁分页模式不需要查询总数据数,因此可以提高查询性能。 ## 分页参数 主要的分页参数如下: | 参数 | 描述 | | --- | --- | | list\_rows | 每页数量 | | page | 当前页 | | path | url路径 | | query | url额外参数 | | fragment | url锚点 | | var\_page | 分页变量 | | type | 分页类名 | 分页参数的设置方式有两种,第一种是在配置文件中定义,例如: ~~~ //分页配置 'paginate' => [ 'type' => 'bootstrap', 'var_page' => 'page', ], ~~~ type属性支持命名空间,例如: ~~~ //分页配置 'paginate' => [ 'type' => '\org\page\bootstrap', 'var_page' => 'page', ], ~~~ 也可以在调用分页方法的时候传入,例如: ~~~ $list = Db::name('user')->where('status',1)->paginate(10,true,[ 'type' => 'bootstrap', 'var_page' => 'page', ]); ~~~