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

Easter79
• 阅读 771
<table class="layui-hide" id="category"></table>



<script type="text/javascript" src="__PLUGINS__/axios/axios.min.js"></script>
<script type="text/javascript">

    layui.use('table', function(){
            var table = layui.table;

            table.render({
                elem: '#category'
                ,url:"{:url('category/cate_list')}"
                ,page: { //支持传入 laypage 组件的所有参数(某些参数除外,如:jump/elem) - 详见文档
                    layout: ['limit', 'count', 'prev', 'page', 'next', 'skip'] //自定义分页布局
                    //,curr: 5 //设定初始在第 5 页
                    ,groups: 1 //只显示 1 个连续页码
                    ,first: false //不显示首页
                    ,last: false //不显示尾页

                }
                ,cols: [[
                    {field:'id', width:80, title: 'ID', sort: true}
                    ,{field:'pid', width:100, title: 'PID'}
                ]]

            });
        });


</script>

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

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

 public function cate_list(){
        //获取分页page和limit参数
        $page=input("get.page")?input("get.page"):1;
        $page=intval($page);
        $limit=input("get.limit")?input("get.limit"):1;
        $limit=intval($limit);
        $start=$limit*($page-1);
        //分页查询
        $cate_list=Db::name("category")->limit($start,$limit)->select();
        $list["msg"]="";
        $list["code"]=0;
        $list["count"]=100;
        $list["data"]=$cate_list;
        if(empty($cate_list)){
            $list["msg"]="暂无数据";
        }
        
        return json($list);
        
    }

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

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

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

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

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

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

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

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

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

{include file="Common/header"}

<fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
    <legend>文章列表&gt;<a href="{:url('category/add')}" >添加栏目</a></legend>
</fieldset>

<!--表格加载div-->
<table class="layui-hide" id="article_tab" lay-filter="article_tab"></table>
<!--这个是选择框tpl-->
<script type="text/html" id="show_tpl">
    <input type="checkbox" name="status" value="{{d.id}}" lay-skin="switch" lay-text="显示|隐藏" lay-filter="show_switch" {{ d.status == 1 ? 'checked' : '' }} >
</script>
<!--这两个是工具栏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>



<script type="text/javascript" src="__PLUGINS__/axios/axios.min.js"></script>
<script type="text/javascript">

    layui.use('table', function(){
        var table = layui.table,form=layui.form;

        //渲染表格
        table.render({
                elem: '#article_tab'
                ,url:"{:url('Article/arc_list')}"
                ,page: { //支持传入 laypage 组件的所有参数(某些参数除外,如:jump/elem) - 详见文档
                    layout: ['limit', 'count', 'prev', 'page', 'next', 'skip'] //自定义分页布局
                    //,curr: 5 //设定初始在第 5 页
                    ,groups: 1 //只显示 1 个连续页码
                    ,first: false //不显示首页
                    ,last: false //不显示尾页

                }
                ,cellMinWidth: 80 //全局定义常规单元格的最小宽度,layui 2.2.1 新增
                ,cols: [[
                    {field:'id', width:80, title: 'ID', sort: true}
                    ,{field:'title', width:150, title: '标题'}
                    ,{field:'keywords',width:260,title:'关键词'}
                    ,{field:'description',width:360,title:'简介'}
                    ,{field:'status',width:100,title:'是否发布',templet: '#show_tpl', unresize: true}
                    ,{field:'cate_url',width:150,title:'操作',toolbar:'#action_bar'}
                ]]

            });

        //修改文章发布状态(单选框选择事件)
        form.on('switch(show_switch)', function(obj){
            var id=parseInt(this.value);
            var status=obj.elem.checked;
            status=status==true?1:0;


            axios.post("{:url('Article/status_update')}", {
                id: id,
                status:status
            })
                .then(function (response) {
                    layer.msg(response.data.msg);

                })
                .catch(function (error) {
                   console.log(error);
                });
        });

        //表格工具栏
        table.on('tool(article_tab)', function(obj){
            var data = obj.data;
            console.log(data);
            if(obj.event === 'detail'){
                //当事件为查看详情的时候,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;
            }
        });


    });


</script>

{include file="Common/footer"}

<?php
/**
 * Created by PhpStorm.
 * User: martinby
 * Date: 2018/3/6
 * Time: 22:49
 */
namespace app\admin\controller;

use think\Controller;
use think\Db;

class Article extends Controller{
    //首页
    public function index(){

        return $this->fetch("Article/index");
    }

    //读取文章列表
    public function arc_list(){
        //获取分页page和limit参数
        $page=input("get.page")?input("get.page"):1;
        $page=intval($page);
        $limit=input("get.limit")?input("get.limit"):1;
        $limit=intval($limit);
        $start=$limit*($page-1);
        //分页查询
        $count=Db::name("article")->count("id");
        $cate_list=Db::name("article")->limit($start,$limit)->order('id desc')->select();


        $list["msg"]="";
        $list["code"]=0;
        $list["count"]=$count;
        $list["data"]=$cate_list;
        if(empty($cate_list)){
            $list["msg"]="暂无数据";
        }

        return json($list);
    }
    
    //显示文章添加页面
    public function add(){
        $web["title"]="文章添加";
        $this->assign("web",$web);
        return $this->fetch("Article/add");
    }
    
    //执行数据添加
    public function do_add(){
        if(request()->isPost()){
            $data["title"]=input("post.title");
            $data["keywords"]=input("post.keywords");
            $data["description"]=input("post.description");
            $data["content"]=input("post.content");
            $data["create_time"]=time();
            $data["status"]=0;

            $vali_res=$this->validate($data,"Article.add");
            if($vali_res===true){
                $res=Db::name("article")->insert($data);
                if($res==1){
                    $response["code"]=1;
                    $response["msg"]="文章添加成功!";
                }else{
                    $response["code"]=0;
                    $response["msg"]="文章加入数据库失败!";
                }

            }else{
                $response["code"]=0;
                $response["msg"]=$vali_res;
            }
            return json($response);

        }
    }
    
    //修改发布状态
    public function status_update(){
        if(request()->isPost()){
            $id=input("post.id");
            $status=input('post.status');


            if($id==null||$id==""||$status==""||$status==null){
                return json(["code"=>0,"msg"=>"参数获取有误"]);
            }

            $res=Db::name("article")->where(["id"=>$id])->update(["status"=>$status]);
            if($res==1){
                return json(["code"=>1,"msg"=>"发布成功"]);
            }else{
                return json(["code"=>0,"msg"=>"修改失败"]);
            }

        }
    }

    //显示修改页面
    public function update(){
        
    }


    //修改数据提交处理
    public function do_update(){

    }



}

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

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

<!--这个是选择框tpl-->
<script type="text/html" id="show_tpl">
    <input type="checkbox" name="status" value="{{d.id}}" lay-skin="switch" lay-text="显示|隐藏" lay-filter="show_switch" {{ d.status == 1 ? 'checked' : '' }} >
</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加载进去渲染

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; } });

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
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
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k