使用foreach和volist标签分别实现模板数据的分页显示:
〓 在application\admin\controller中创建User.php
<?php
/**
* 后台首页控制器
*/
namespace app\admin\controller;
use think\Controller; //导入基类
use app\admin\model\User as UserModel; //导入模型类
class User extends Controller
{
public function list()
{
/**
* 知识点:循环标签、分页
*
* 技巧:
* 1. 模板中注释:单行注释:{//单行注释},多行注释{/*多行注释*\/},在源代码中会删除
* 2. 模板中的数据不一定都来源于控制器,可以通过模型在当前模板中直接获取:
* A、{//在当前模板中创建变量,来保存数据表中的数据}
* {assign name="users" value=":\app\admin\model\User::all()"}
* 因为"\app\admin\model\User::all()"是一条可执行的语句,需要在前加上":"
* B、通过助手函数model来进行简化:
* {assign name="users" value=":model('user')::all()"}
* 3. 数据判断,范围限定:
* {in}:是一个离散的数据,没有连贯性
* 例:{//性别必须是0或1,才是合法数据}
{in name="user.sex" value="0,1"}
{if $user.sex == 0}
男
{else /}
女
{/if}
{/in}
* {between}:是一个连续的数据
* 例:{between name="user.age" value="20,30"}
* 很年轻嘛
* {/between}
* {between name="user.age" value="31,50"}
* 人到中年
* {else /}
* 该退休了
* {/between}
*
* 循环标签:
一、foreach标签:类似于原生foreach
二、volist标签:使用最广泛,参数众多,功能强大
1. name=""中的名称不能更改,是控制器传入过来的变量名称
2. id=""中的名称可自定义,是临时变量
3. 输出从第5条开始显示5条的数据,加入属性offset="4" length="5"
4. 只显示偶数行数据:模除运算,就是求余数
① 属性中加入mod="2"
② 使用比较标签:{eq name="mod" value="1"}{/eq} //偶数(value="1"),奇数(value="0")
5. 判断数据是否为空:
{empty name="users"}
为空提示
{else /}
不为空时显示的数据
{/empty}
*
* 分页步骤:
* 1.分页配置
* 2.设置每页显示数据数
* 3.设置是否为简单分页
* 4.获取分页所有数据:UserModel::paginate($num, $simple, $config)
* 5.渲染分页HTML代码,返回分页变量
* 6.将分页数据和分页变量赋值给模板
*/
//通过模板获取user表中的数据
$users = UserModel::all(function($query){
$query->field(['id','name','sex','email','create_time','update_time','delete_time']);
});
//halt($users);//测试数据是否获取后自动结束程序
//模板赋值
$this->view->assign('users',$users);
//分页
//进行分页配置
$config = [
'type' => 'bootstrap',
'var_page' => 'page'
];
//设置每页显示的数据
$num = 5;
//设置是否简单分页:上一页,下一页
$simple = false;
//用模型来获取所有分页数据:think\Paginate
//返回的是一个对象,paginate(显示数据条数, 是否是简单分页, 分页配置)参数顺序不能错
$paginate = UserModel::paginate($num, $simple, $config);
//渲染分页HTML代码,返回分页变量
$page = $paginate->render();
//将分页数据赋值给模板
$this->view->assign('users', $paginate);
//将分页变量赋值给模板
$this->view->assign('page', $page);
//渲染模板
return $this->view->fetch();
}
}
〓 模板文件:app\admin\model\User.php
<?php
/**
* 用户表User模型
*/
namespace app\admin\model;
use think\Model;
class User extends Model
{
//设置数据库表命
protected $table = 'user';
//设置数据表主键
protected $pk = 'id';
}
〓 视图模板文件:
{//继承父模板}
{extend name="public/base" /}
{block name="meta"}
{include file="public/meta" /}
{/block}
{block name="SEO"}
<title>会员列表 - 会员管理 - H-ui.admin v3.0</title>
<meta name="keywords" content="H-ui.admin v3.0,H-ui网站后台模版,后台模版下载,后台管理系统模版,HTML后台模版下载">
<meta name="description" content="H-ui.admin v3.0,是一款由国人开发的轻量级扁平化网站后台模板,完全免费开源的网站后台管理系统模版,适合中小型CMS后台系统。">
</head>
<body>
{/block}
{block name="header"}
{include file="public/header" /}
{/block}
{block name="menu"}
{include file="public/menu" /}
{/block}
{block name="main"}
<section class="Hui-article-box">
<nav class="breadcrumb"><i class="Hui-iconfont"></i> 首页 <span class="c-gray en">></span> 用户中心 <span class="c-gray en">></span> 会员列表<a class="btn btn-success radius r" style="line-height:1.6em;margin-top:3px" href="javascript:location.replace(location.href);" title="刷新" ><i class="Hui-iconfont"></i></a></nav>
<div class="Hui-article">
<article class="cl pd-20">
<div class="text-c"> 日期范围:
<input type="text" onfocus="" id="datemin" class="input-text Wdate" style="width:120px;">
<input type="text" onfocus="" id="datemax" class="input-text Wdate" style="width:120px;">
<input type="text" class="input-text" style="width:250px" placeholder="输入会员名称、电话、邮箱" id="" name="">
<button type="submit" class="btn btn-success radius" id="" name=""><i class="Hui-iconfont"></i> 搜用户</button>
</div>
<div class="cl pd-5 bg-1 bk-gray mt-20"> <span class="l"><a href="javascript:;" onclick="datadel()" class="btn btn-danger radius"><i class="Hui-iconfont"></i> 批量删除</a> <a href="javascript:;" onclick="member_add('添加用户','member-add.html','','510')" class="btn btn-primary radius"><i class="Hui-iconfont"></i> 添加用户</a></span> <span class="r">共有数据:<strong>88</strong> 条</span> </div>
<div class="mt-20">
<table class="table table-border table-bordered table-hover table-bg table-sort">
<thead>
<tr class="text-c">
<th width="25"><input type="checkbox" name="" value=""></th>
<th width="80">ID</th>
<th width="100">用户名</th>
<th width="40">性别</th>
<th width="90">邮箱</th>
<th width="150">加入时间</th>
<th width="130">更新时间</th>
<th width="70">状态</th>
<th width="100">操作</th>
</tr>
</thead>
<tbody>
{//assign name="users" value=":model('user')::all()"}
<!--{foreach $users as $user}
<tr class="text-c">
<td><input type="checkbox" value="1" name=""></td>
<td>{$user.id}</td>
<td>{$user.name}</td>
<td>{$user.sex}</td>
<td>{$user.email}</td>
<td>{$user.create_time}</td>
<td>{$user.update_time}</td>
<td>{$user.delete_time}</td>
<td class="td-manage"><a style="text-decoration:none" onClick="member_stop(this,'10001')" href="javascript:;" title="停用"><i class="Hui-iconfont"></i></a> <a title="编辑" href="javascript:;" onclick="member_edit('编辑','member-add.html','4','','510')" class="ml-5" style="text-decoration:none"><i class="Hui-iconfont"></i></a> <a style="text-decoration:none" class="ml-5" onClick="change_password('修改密码','change-password.html','10001','600','270')" href="javascript:;" title="修改密码"><i class="Hui-iconfont"></i></a> <a title="删除" href="javascript:;" onclick="member_del(this,'1')" class="ml-5" style="text-decoration:none"><i class="Hui-iconfont"></i></a></td>
</tr>
{/foreach}-->
{empty name="users"}
<tr class="text-c">
<td colspan="9">数据为空</td>
</tr>
{else /}
{volist name="users" id="user"}
<tr class="text-c">
<td><input type="checkbox" value="1" name=""></td>
<td>{$user.id}</td>
<td>{$user.name}</td>
<td>
{//$user.sex}
{//性别必须是0或1,才是合法数据}
{in name="user.sex" value="0,1"}
{if $user.sex == 0}
男
{else /}
女
{/if}
{/in}
</td>
<td>{$user.email}</td>
<td>{$user.create_time}</td>
<td>{$user.update_time}</td>
<td>{$user.delete_time}</td>
<td class="td-manage"><a style="text-decoration:none" onClick="member_stop(this,'10001')" href="javascript:;" title="停用"><i class="Hui-iconfont"></i></a> <a title="编辑" href="javascript:;" onclick="member_edit('编辑','member-add.html','4','','510')" class="ml-5" style="text-decoration:none"><i class="Hui-iconfont"></i></a> <a style="text-decoration:none" class="ml-5" onClick="change_password('修改密码','change-password.html','10001','600','270')" href="javascript:;" title="修改密码"><i class="Hui-iconfont"></i></a> <a title="删除" href="javascript:;" onclick="member_del(this,'1')" class="ml-5" style="text-decoration:none"><i class="Hui-iconfont"></i></a></td>
</tr>
{/volist}
{/empty}
</tbody>
</table>
{load href="/static/h-ui/css/Bootstrap.css" /}
{$page|raw}
</div>
</article>
</div>
</section>
{/block}
{block name="js"}
<!--请在下方写此页面业务相关的脚本-->
{load href="/lib/My97DatePicker/4.8/WdatePicker.js" /}
{load href="/lib/datatables/1.10.0/jquery.dataTables.min.js" /}
{load href="/lib/laypage/1.2/laypage.js" /}
<script type="text/javascript">
$(function(){
$('.table-sort').dataTable({
"aaSorting": [[ 1, "desc" ]],//默认第几个排序
"bStateSave": true,//状态保存
"aoColumnDefs": [
//{"bVisible": false, "aTargets": [ 3 ]} //控制列的隐藏显示
{"orderable":false,"aTargets":[0,8,9]}// 制定列不参与排序
]
});
$('.table-sort tbody').on( 'click', 'tr', function () {
if ( $(this).hasClass('selected') ) {
$(this).removeClass('selected');
}
else {
table.$('tr.selected').removeClass('selected');
$(this).addClass('selected');
}
});
});
/*用户-添加*/
function member_add(title,url,w,h){
layer_show(title,url,w,h);
}
/*用户-查看*/
function member_show(title,url,id,w,h){
layer_show(title,url,w,h);
}
/*用户-停用*/
function member_stop(obj,id){
layer.confirm('确认要停用吗?',function(index){
$(obj).parents("tr").find(".td-manage").prepend('<a style="text-decoration:none" onClick="member_start(this,id)" href="javascript:;" title="启用"><i class="Hui-iconfont"></i></a>');
$(obj).parents("tr").find(".td-status").html('<span class="label label-defaunt radius">已停用</span>');
$(obj).remove();
layer.msg('已停用!',{icon: 5,time:1000});
});
}
/*用户-启用*/
function member_start(obj,id){
layer.confirm('确认要启用吗?',function(index){
$(obj).parents("tr").find(".td-manage").prepend('<a style="text-decoration:none" onClick="member_stop(this,id)" href="javascript:;" title="停用"><i class="Hui-iconfont"></i></a>');
$(obj).parents("tr").find(".td-status").html('<span class="label label-success radius">已启用</span>');
$(obj).remove();
layer.msg('已启用!',{icon: 6,time:1000});
});
}
/*用户-编辑*/
function member_edit(title,url,id,w,h){
layer_show(title,url,w,h);
}
/*密码-修改*/
function change_password(title,url,id,w,h){
layer_show(title,url,w,h);
}
/*用户-删除*/
function member_del(obj,id){
layer.confirm('确认要删除吗?',function(index){
$(obj).parents("tr").remove();
layer.msg('已删除!',{icon:1,time:1000});
});
}
</script>
<!--/请在上方写此页面业务相关的脚本-->
{/block}
{block name="footer"}
{include file="public/footer" /}
{/block}