TP5+layui表格使用(更新中)

1<table class="layui-hide" id="category"></table> 2 3 4 5<script type="text/javascript" src="__PLUGINS__/axios/axios.min.js"></script> 6<script type="text/javascript"> 7 8 layui.use('table', function(){ 9 var table = layui.table; 10 11 table.render({ 12 elem: '#category' 13 ,url:"{:url('category/cate_list')}" 14 ,page: { //支持传入 laypage 组件的所有参数(某些参数除外,如:jump/elem) - 详见文档 15 layout: ['limit', 'count', 'prev', 'page', 'next', 'skip'] //自定义分页布局 16 //,curr: 5 //设定初始在第 5 页 17 ,groups: 1 //只显示 1 个连续页码 18 ,first: false //不显示首页 19 ,last: false //不显示尾页 20 21 } 22 ,cols: [[ 23 {field:'id', width:80, title: 'ID', sort: true} 24 ,{field:'pid', width:100, title: 'PID'} 25 ]] 26 27 }); 28 }); 29 30 31</script>

在这里url在js加载后,会带两个参数,一个page,一个limit 如下所示

http://www.xx.com/admin/category/cate\_list.html?page=1&limit=10

1 public function cate_list(){ 2 //获取分页page和limit参数 3 $page=input("get.page")?input("get.page"):1; 4 $page=intval($page); 5 $limit=input("get.limit")?input("get.limit"):1; 6 $limit=intval($limit); 7 $start=$limit*($page-1); 8 //分页查询 9 $cate_list=Db::name("category")->limit($start,$limit)->select(); 10 $list["msg"]=""; 11 $list["code"]=0; 12 $list["count"]=100; 13 $list["data"]=$cate_list; 14 if(empty($cate_list)){ 15 $list["msg"]="暂无数据"; 16 } 17 18 return json($list); 19 20 }

注1:TP5中,这里分页得到值后查询后,使用return json_encode($list) 是不行的,必须要用json($list)才会返回一个对象,json_encode只是返回的一个json字符串

注2:这个$list,也就是我们返回的值,要根据一定的格式来,msg,code,count,不能少,data里面才是你查询出去的值.

///////////////////////////////////////////3.7日更新////////////////////////////////////////////////////////

///////////////////////////////////////////3.7日更新////////////////////////////////////////////////////////

///////////////////////////////////////////3.7日更新////////////////////////////////////////////////////////

今天主要是,要完成这样一个有查看和修改发布字段的表格,涉及到表格的一些其他使用

不多批夸,先上代码,再解释.

注意,这里的php代码是使用了TP5的框架.然后ajax提交是使用的axios,因为这个出错了catch(error)报错比较舒服,感觉用着比jquery安逸一些.而且jquery小一些.

1{include file="Common/header"} 2 3<fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;"> 4 <legend>文章列表&gt;<a href="{:url('category/add')}" >添加栏目</a></legend> 5</fieldset> 6 7<!--表格加载div--> 8<table class="layui-hide" id="article_tab" lay-filter="article_tab"></table> 9<!--这个是选择框tpl--> 10<script type="text/html" id="show_tpl"> 11 <input type="checkbox" name="status" value="{{d.id}}" lay-skin="switch" lay-text="显示|隐藏" lay-filter="show_switch" {{ d.status == 1 ? 'checked' : '' }} > 12</script> 13<!--这两个是工具栏tpl--> 14<script type="text/html" id="action_bar"> 15 <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">查看</a> 16 <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="update">修改</a> 17</script> 18 19 20 21<script type="text/javascript" src="__PLUGINS__/axios/axios.min.js"></script> 22<script type="text/javascript"> 23 24 layui.use('table', function(){ 25 var table = layui.table,form=layui.form; 26 27 //渲染表格 28 table.render({ 29 elem: '#article_tab' 30 ,url:"{:url('Article/arc_list')}" 31 ,page: { //支持传入 laypage 组件的所有参数(某些参数除外,如:jump/elem) - 详见文档 32 layout: ['limit', 'count', 'prev', 'page', 'next', 'skip'] //自定义分页布局 33 //,curr: 5 //设定初始在第 5 页 34 ,groups: 1 //只显示 1 个连续页码 35 ,first: false //不显示首页 36 ,last: false //不显示尾页 37 38 } 39 ,cellMinWidth: 80 //全局定义常规单元格的最小宽度,layui 2.2.1 新增 40 ,cols: [[ 41 {field:'id', width:80, title: 'ID', sort: true} 42 ,{field:'title', width:150, title: '标题'} 43 ,{field:'keywords',width:260,title:'关键词'} 44 ,{field:'description',width:360,title:'简介'} 45 ,{field:'status',width:100,title:'是否发布',templet: '#show_tpl', unresize: true} 46 ,{field:'cate_url',width:150,title:'操作',toolbar:'#action_bar'} 47 ]] 48 49 }); 50 51 //修改文章发布状态(单选框选择事件) 52 form.on('switch(show_switch)', function(obj){ 53 var id=parseInt(this.value); 54 var status=obj.elem.checked; 55 status=status==true?1:0; 56 57 58 axios.post("{:url('Article/status_update')}", { 59 id: id, 60 status:status 61 }) 62 .then(function (response) { 63 layer.msg(response.data.msg); 64 65 }) 66 .catch(function (error) { 67 console.log(error); 68 }); 69 }); 70 71 //表格工具栏 72 table.on('tool(article_tab)', function(obj){ 73 var data = obj.data; 74 console.log(data); 75 if(obj.event === 'detail'){ 76 //当事件为查看详情的时候,open一个页面,内容为data.content 77 layer.open({ 78 type: 1 79 ,title: "文章详情" //不显示标题栏 80 ,titleAlign:'c' 81 ,closeBtn: false 82 ,area: '300px;' 83 ,shade: 0.8 84 ,id: 'LAY_article' //设定一个id,防止重复弹出 85 ,btn: ['确定'] 86 ,btnAlign: 'c' 87 ,content:data.content 88 ,moveType: 1 89 }); 90 } else if(obj.event === 'update'){ 91 //当事件为修改的时候,跳转页面 92 window.location.href="{:url('Article/update')}"+"?id="+data.id; 93 } 94 }); 95 96 97 }); 98 99 100</script> 101 102{include file="Common/footer"} 103 104<?php 105/** 106 * Created by PhpStorm. 107 * User: martinby 108 * Date: 2018/3/6 109 * Time: 22:49 110 */ 111namespace app\admin\controller; 112 113use think\Controller; 114use think\Db; 115 116class Article extends Controller{ 117 //首页 118 public function index(){ 119 120 return $this->fetch("Article/index"); 121 } 122 123 //读取文章列表 124 public function arc_list(){ 125 //获取分页page和limit参数 126 $page=input("get.page")?input("get.page"):1; 127 $page=intval($page); 128 $limit=input("get.limit")?input("get.limit"):1; 129 $limit=intval($limit); 130 $start=$limit*($page-1); 131 //分页查询 132 $count=Db::name("article")->count("id"); 133 $cate_list=Db::name("article")->limit($start,$limit)->order('id desc')->select(); 134 135 136 $list["msg"]=""; 137 $list["code"]=0; 138 $list["count"]=$count; 139 $list["data"]=$cate_list; 140 if(empty($cate_list)){ 141 $list["msg"]="暂无数据"; 142 } 143 144 return json($list); 145 } 146 147 //显示文章添加页面 148 public function add(){ 149 $web["title"]="文章添加"; 150 $this->assign("web",$web); 151 return $this->fetch("Article/add"); 152 } 153 154 //执行数据添加 155 public function do_add(){ 156 if(request()->isPost()){ 157 $data["title"]=input("post.title"); 158 $data["keywords"]=input("post.keywords"); 159 $data["description"]=input("post.description"); 160 $data["content"]=input("post.content"); 161 $data["create_time"]=time(); 162 $data["status"]=0; 163 164 $vali_res=$this->validate($data,"Article.add"); 165 if($vali_res===true){ 166 $res=Db::name("article")->insert($data); 167 if($res==1){ 168 $response["code"]=1; 169 $response["msg"]="文章添加成功!"; 170 }else{ 171 $response["code"]=0; 172 $response["msg"]="文章加入数据库失败!"; 173 } 174 175 }else{ 176 $response["code"]=0; 177 $response["msg"]=$vali_res; 178 } 179 return json($response); 180 181 } 182 } 183 184 //修改发布状态 185 public function status_update(){ 186 if(request()->isPost()){ 187 $id=input("post.id"); 188 $status=input('post.status'); 189 190 191 if($id==null||$id==""||$status==""||$status==null){ 192 return json(["code"=>0,"msg"=>"参数获取有误"]); 193 } 194 195 $res=Db::name("article")->where(["id"=>$id])->update(["status"=>$status]); 196 if($res==1){ 197 return json(["code"=>1,"msg"=>"发布成功"]); 198 }else{ 199 return json(["code"=>0,"msg"=>"修改失败"]); 200 } 201 202 } 203 } 204 205 //显示修改页面 206 public function update(){ 207 208 } 209 210 211 //修改数据提交处理 212 public function do_update(){ 213 214 } 215 216 217 218}

//第一部分,如何加载出那个是否发布的选择框,这里的{{d.id}}是框架的写法,获取你这一条数据的id值,

{{ d.status == 1 ? 'checked' : '' }}这一串代码是根据你的status值判断,如果status为1,就为checked选中

1<!--这个是选择框tpl--> 2<script type="text/html" id="show_tpl"> 3 <input type="checkbox" name="status" value="{{d.id}}" lay-skin="switch" lay-text="显示|隐藏" lay-filter="show_switch" {{ d.status == 1 ? 'checked' : '' }} > 4</script>

//表格这里,我们引入上面选择框tpl的id,即#show_tpl ,{field:'status',width:100,title:'是否发布',templet: '#show_tpl', unresize: true}

当你的选择框从未选择,变成选中状态,我们如何去获取值,并且请求后台改变这个状态呢?

//修改文章发布状态(单选框选择事件) form.on('switch(show_switch)', function(obj){ //这里这个show_switch是上面的tpl的lay-filter的值,要进行对应 var id=parseInt(this.value);//这里获取的是你这一条数据的id值 var status=obj.elem.checked;//获取状态的checked,打印出来选中为true,未选中为false status=status==true?1:0;//把这个状态值进行判断一下,如果true,为1,否则,为false

  //这一块儿为post提交到后台,进行数据处理即可 axios.post("{:url('Article/status_update')}", { id: id, status:status }) .then(function (response) { //layer弹出后台返回的信息 layer.msg(response.data.msg); }) .catch(function (error) { //打印报错的值. console.log(error); }); });

//第二部分,如何往里面加添加按钮,即工具栏

首先,我们还是要先写工具栏的tpl的html,然后用js加载进去渲染

<!--这两个是工具栏tpl--> <script type="text/html" id="action\_bar"> <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">查看</a> <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="update">修改</a> </script>

table引入进去,进行渲染

,{field:'cate_url',width:150,title:'操作',toolbar:'#action_bar'} //对应上面代码的id

按钮绑定事件处理

//表格工具栏 table.on('tool(article_tab)', function(obj){ //这个article_tab是你的table的lay-filter的值 var data = obj.data; console.log(data); if(obj.event === 'detail'){ //这里这个detail跟上面tpl里面的lay-event对应 //这里面的内容具体写什么,都可以,, //当事件为查看详情的时候,open一个页面,内容为data.content layer.open({ type: 1 ,title: "文章详情" //不显示标题栏 ,titleAlign:'c' ,closeBtn: false ,area: '300px;' ,shade: 0.8 ,id: 'LAY_article' //设定一个id,防止重复弹出 ,btn: ['确定'] ,btnAlign: 'c' ,content:data.content ,moveType: 1 }); } else if(obj.event === 'update'){ //当事件为修改的时候,跳转页面 window.location.href="{:url('Article/update')}"+"?id="+data.id; } });

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )