分页

分页实现

版本 新增功能
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">«</a>
							</li>
							<li>
							<a
								href="?page=1">1</a>
							</li>
							<li
								class="active">
							<span>2</span>
							</li>
							<li
								class="disabled">
							<span>»</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">«</a>
							</li>
							<li
								class="disabled">
							<span>»</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', ]);
					
文档最后更新时间:2018-04-26 10:53:13

文档
目录

深色
模式

切换
宽度