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

<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日更新////////////////////////////////////////////////////////

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

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

注意,这里的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加载进去渲染

<!--这两个是工具栏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;
    }
});

猜你喜欢

转载自my.oschina.net/laobia/blog/1623749