模板的分页渲染的时候着实遇到一些问题,一个是不能循环遍历,另一个没有分页。等找到问题后,却原来只是小问题,确实不应该,还是因为不熟悉,在此记录一下,也供没有做过的同学查询。
目录
分页实现
获取分页集合
获取分页数据集合,无论使用模型或者Db实例都使用paginate()方法来获取。
通过view方法把分页数据集合传递给视图。
public function index()
{
$pageSize = 2;
$admins = Db::name('admins')->order('id', 'desc')->paginate($pageSize);
return view('test/index', [
'list' => $admins
]);
}
静态模板遍历
使用单个花括号的foreach和/foreach。
点语法来访问数组的内容。
<table>
<tr>
<th>ID</th>
<th>名称</th>
<th>登录次数</th>
<th>状态</th>
<th>操作</th>
</tr>
{foreach $list as $k => $v}
<tr>
<td>{$v.id}</td>
<td>{$v.name}</td>
<td>{$v.login_count}</td>
<td>{if $v.status == 1} 正常 {else} 禁用 {/if}</td>
<td><a href="#">删除</a></td>
</tr>
{/foreach}
</table>
显示分页
注意:如果数据条数较少,设置分页数据也要少,否则不会显示分页
在视图变量后增加|raw,要紧挨着,并且花括号两边不要有空格,否则可能解析为字符串。
{$list|raw }
分页效果如下:
美化分页
原来的分页很难看,可以通过style设置样式,仿照bootstrap分页样式。
css样式
<style>
.pagination {
display: inline-block;
padding-left: 0;
margin: 20px 0;
border-radius: 4px;
}
.pagination > li {
display: inline;
}
.pagination > li:first-child > span {
margin-left: 0;
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
}
.pagination > li > a, .pagination > li > span {
background-color: #FFF;
border: 1px solid #DDD;
float: left;
line-height: 1.42857;
margin-left: -1px;
padding: 6px 18px;
position: relative;
text-decoration: none;
color:#23527c;
}
.pagination > li.active span {
background-color: #009688 !important;
border-color: #DDD;
cursor: default;
z-index: 2;
}
.pagination > li > a:hover {
background-color: #eee;
}
.pagination > .disabled > span, .pagination > .disabled > span:focus, .pagination > .disabled > span:hover {
cursor: not-allowed;
background-color: #fff;
border-color: #ddd;
}
</style>
效果
其他功能
单独赋值分页变量
public function index()
{
$pageSize = 2;
$admins = Db::name('admins')->order('id', 'desc')->paginate($pageSize);
return view('test/index', [
'list' => $admins,
'page' => $admins->render(),
]);
}
模板
{$page|raw }
获取总记录
可通过分页集合变量获取其中的总记录数量
$list = Db::name('admins')->order('id', 'desc')->paginate($pageSize);
echo $list->total();
限定总记录数
如:限定从2开始取2条
->paginate(2, 2);
设置简洁分页
设置页码为只有上下页的简洁分页。
因为类名改变,上面美化分页样式就变了,需要重新修改样式。
->paginate(2, true)
总结
ThinkPHP的内置分页已经封装好了, 直接通过paginate来获取分页很简单。如果样式不好看,可以自己设置一些样式来美化。