ThinkPHP5.1分页实现
分页实现
ThinkPHP5.1
内置了分页实现,要给数据添加分页输出功能变得非常简单,可以直接在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();
模板文件中分页输出代码如下:
html <div> <ul> {volist name='list' id='user'} <li> {$user.nickname}</li> {/volist} </ul> </div> {$list|raw}
也可以单独赋值分页输出的模板变量
// 查询状态为1的用户数据 并且每页显示10条数据 $list = User::where('status',1)->paginate(10); // 获取分页显示 $page = $list->render(); // 模板变量赋值 $this->assign('list', $list); $this->assign('page', $page); // 渲染模板输出 return $this->fetch();
模板文件中分页输出代码如下:
html <div> <ul> {volist name='list' id='user'} <li> {$user.nickname}</li> {/volist} </ul> </div> {$page|raw}
默认情况下,生成的分页输出是完整分页功能,带总分页数据和上下页码,分页样式只需要通过样式修改即可,完整分页默认生成的分页输出代码为:
<ul class="pagination"> <li><a href="?page=1">«</a></li> <li><a href="?page=1">1</a></li> <li class="active"><span>2</span></li> <li class="disabled"><span>»</span></li> </ul>
如果你需要单独获取总的数据,可以使用
// 查询状态为1的用户数据 并且每页显示10条数据 $list = User::where('status',1)->paginate(10); // 获取总记录数 $count = $list->total(); // 把分页数据赋值给模板变量list $this->assign('list', $list); // 渲染模板输出 return $this->fetch();
传入总记录数
支持传入总记录数而不会自动进行总数计算,例如:
// 查询状态为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();
>[danger] 对于UNION
查询以及一些特殊的复杂查询,推荐使用这种方式首先单独查询总记录数,然后再传入分页方法
分页后数据处理
支持分页类后数据直接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">«</a></li> <li class="disabled"><span>»</span></li> </ul>
> 由于简洁分页模式不需要查询总数据数,因此可以提高查询性能。
分页参数
主要的分页参数如下:
参数 | 描述 |
---|---|
list_rows | 每页数量 |
page | 当前页 |
path | url路径 |
query | url额外参数 |
fragment | url锚点 |
var_page | 分页变量 |
type | 分页类名 |
分页参数的设置方式有两种,第一种是在配置文件paginate.php
中定义,例如:
//分页配置 return [ 'type' => 'bootstrap', 'var_page' => 'page', ];type属性支持命名空间,例如:
//分页配置 return [ 'type' => '\org\page\bootstrap', 'var_page' => 'page', ];
也可以在调用分页方法的时候传入,例如:
$list = Db::name('user')->where('status',1)->paginate(10,true,[ 'type' => 'bootstrap', 'var_page' => 'page', ]);
>[danger] 如果需要在分页的时候传入查询条件,可以使用query参数拼接额外的查询参数
相关热词:
相关内容
这些是最新的
热门排行
- THINKPHP5+GatewayWorker+Workerman 开发在线客服系统
- 在手机浏览器网页中点击链接跳转到微信界面的方法
- 尊云网站目录系统 ThinkPHP5网站分类目录程序 v2.2.221011
- CentOS 7安装shadowsock(一键安装脚本)
- AdminTemplate 基于LayUI 2.4.5实现的网站后台管理模板
- 用NW.js(node-webkit)开发多平台的桌面客户端
- PHP生成随机昵称/用户名
- THINKPHP5网站分类目录程序 尊云网站目录系统
- 织梦(DEDECMS)微信支付接口 微信插件
- 基于LayUI开发的 网站后台管理模板 BeginnerAdmin
- 响应式后台网站模板 - AMA.ADMIN
- layuiAdmin后台管理模板 Iframe版
- LayUI 1.0.9 升级 至 LayUI 2.1.4 方法
- 简洁清爽的会员中心模板
- jQuery幸运大转盘抽奖活动代码