> 백엔드 개발 > PHP 튜토리얼 > layui는 동적 및 정적 데이터 테이블의 페이징을 구현합니다.

layui는 동적 및 정적 데이터 테이블의 페이징을 구현합니다.

不言
풀어 주다: 2023-03-25 13:40:02
원래의
6453명이 탐색했습니다.

이 글은 Layui의 동적 및 정적 데이터 테이블 페이징 구현을 주로 소개합니다. 이제는 필요한 친구들이 참고할 수 있도록 공유하겠습니다.

개발 관리 배경은 모든 개발자가 갖춰야 할 것입니다. 링크, 백엔드 프로그래머로서 회사의 모든 기밀 데이터는 우리 손에 있으므로 현재로서는 회사의 핵심 구성원이 아닌 경우 특정 데이터에 접근할 수 없습니다. 모든 작업은 우리 손에 달려 있습니다. PS부터 Linux까지 모든 작업을 우리 손에 맡겨야 합니다. 다행히도 우리는 프론트엔드 프레임워크인layui를 발견하여 우리의 부담을 크게 덜어주었습니다.

오늘은 먼저 layui가 동적 데이터 테이블, 정적 데이터 테이블, 테이블 페이징을 구현하는 방법을 알아보겠습니다. 여기에는 데이터 테이블의 동적 새로 고침, 데이터 테이블 도구 모음 사용, 양식 제출 및 기타 기능도 포함됩니다. 이 정적 페이징은 정보 웹사이트에도 적용 가능합니다. 제 작업 개발 환경은 debian 데스크톱 버전이므로 모든 실험도 debianlayui实现动态数据表,静态数据表,以及表格的分页,其中还涉及到动态刷新数据表,数据表工具栏使用,表单提交等功能,这个静态分页同样适用在信息类网站,我的工作开发环境是debian桌面版,所以所有的实验也是在debian基础上测试

layui动态数据表

动态数据表的效果图

layui는 동적 및 정적 데이터 테이블의 페이징을 구현합니다.

实现过程

业务逻辑我都写到注释里面了,这样大家也友好一些,避免一会看代码,一会看说明容易分神

前端代码:

  • head.phtml(头文件代码)

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <title><?php echo $curTitle;?></title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="format-detection" content="telephone=no">
    <link rel="stylesheet" href="static/css/layui.css" media="all">
    <link rel="stylesheet" href="static/css/globals.css" media="all">
    <script src="static/layui.js" charset="utf-8"></script>
    <!--引入自定义模块全局配置文件-->
    <script src="static/global.js" charset="utf-8"></script>
</head>
<body class="layui-layout-body">
로그인 후 복사
  • order_orderlist.phtml(主体业务代码)

<?php $this->import("head"); ?>
<p class="layui-fluid">
    <blockquote class="layui-elem-quote">注意:为保障访问速度,查询同时请配合时间范围,默认显示一天以内的记录</blockquote>
    <br/>
    <p class="layui-form-item layui-form-pane">
        <p class="layui-inline">
            <label class="layui-form-label" style="width: 85px;">商户号</label>
            <p class="layui-input-inline" style="width: 165px;">
                <input type="text" name="merchant_no" autocomplete="off" class="layui-input">
            </p>
        </p>
        <p class="layui-inline">
            <label class="layui-form-label" style="width: 85px;">订单号:</label>
            <p class="layui-input-inline" style="width: 165px;">
                <input type="text" name="order_no" autocomplete="off" class="layui-input">
            </p>
        </p>
        <p class="layui-inline">
            <label class="layui-form-label" style="width: 95px;">发起时间</label>
            <p class="layui-input-inline" style="width: 165px;">
                <input type="text" class="layui-input" name="start_time" id="test5" placeholder="yyyy-MM-dd HH:mm:ss">
            </p>
            <p class="layui-form-mid">-</p>
            <p class="layui-input-inline" style="width: 165px;">
                <input type="text" class="layui-input" name="end_time" id="test6" placeholder="yyyy-MM-dd HH:mm:ss">
            </p>
        </p>
        <p class="layui-inline">
            <button id="fuck-btn" class="layui-btn layui-btn-normal" data-type="reload"><i class="layui-icon">&#xe615;</i>查询</button>
            <button id="reloadtable" class="layui-btn layui-btn-normal"><i class="layui-icon">&#x1002;</i>刷新数据</button>
            <button id="reloadpage" class="layui-btn layui-btn-normal"><i class="layui-icon">&#x1002;</i>刷新页面</button>
        </p>
    </p>
<table class="layui-hide" id="test"></table>
</p>
<script>
    // 加载需要用到的模块,如果有使用到自定义模块也在此加载
    layui.use([&#39;laydate&#39;,&#39;form&#39;,&#39;table&#39;], function(){
        // 初始化元素,如果有大量的元素操作可以也引入和初始化element模块
        var table = layui.table;
        var form = layui.form;
        var laydate = layui.laydate;
        var $ = layui.$;
        // 定义时间选择器
        laydate.render({
            elem:&#39;#test5&#39;,
            type:&#39;datetime&#39;
        });
        laydate.render({
            elem:&#39;#test6&#39;,
            type:&#39;datetime&#39;
        });
        // 动态数据表渲染
        table.render({
             elem: &#39;#test&#39;                            /* 绑定表格容器id */
            ,url:&#39;index.php?c=orders&a=orderList&#39;     /* 获取数据的后端API URL */
            ,where:{getlist:&#39;orderlist&#39;}              /* 这里还可以额外的传参到后端 */
            ,method: &#39;post&#39;                           /* 使用什么协议,默认的是GET */
            ,cellMinWidth: 60                         /* 最小单元格宽度 */
            ,cols: [[
                 {field:&#39;orderno&#39;, title: &#39;订单号&#39;,align: &#39;center&#39;,sort:true}
                ,{field:&#39;username&#39;, title: &#39;商户号&#39;,align: &#39;center&#39;}
                ,{field:&#39;user_orderno&#39;, title: &#39;商户订单号&#39;,align: &#39;center&#39;}
                ,{field:&#39;trace_time&#39;, title: &#39;创建时间&#39;,align: &#39;center&#39;,sort:true,width:200}
                ,{field:&#39;price&#39;, title: &#39;交易金额&#39;,align: &#39;center&#39;,sort:true}
                ,{field:&#39;fee&#39;, title: &#39;手续费&#39;,align: &#39;center&#39;,sort:true,width:80}
                ,{field:&#39;real_price&#39;, title: &#39;结算金额&#39;,align: &#39;center&#39;,sort:true}
                ,{field:&#39;pay_type&#39;, title: &#39;支付类型&#39;, align: &#39;center&#39;}
                ,{field:&#39;pay_status&#39;, title: &#39;订单状态&#39;,align: &#39;center&#39;,width:90}
                ,{field:&#39;pay_time&#39;, title: &#39;支付时间&#39;,align: &#39;center&#39;,sort:true,width:200}
                ,{field:&#39;push_nums&#39;, title: &#39;通知次数&#39;,align: &#39;center&#39;,width:90}
                ,{field:&#39;notice_result&#39;, title: &#39;通知支付结果&#39;,align: &#39;center&#39;}
            ]]    // 使用sort将自动为我们添加排序事件,完全不用人工干预
            ,page: true
            ,limit:10
            ,id:&#39;testReload&#39; // 这里就是重载的id
        });
        // 数据表重载,这个是配合上面的表格一起使用的
        var active = {
            reload:function(){
                table.reload(&#39;testReload&#39;,{
                   // 点击查询和刷新数据表会把以下参数传到后端进行查找和分页显示
                    where:{
                        merchant_no:$("input[name=&#39;merchant_no&#39;]").val(),
                        order_no: $("input[name=&#39;order_no&#39;]").val(),
                        start_time:$("input[name=&#39;start_time&#39;]").val(),
                        end_time:$("input[name=&#39;end_time&#39;]").val()
                    }
                });
            }
        };
        
        form.render(); // 渲染表单
        // 查找点击时间,这里的事件绑定建议使用on来绑定,因为元素都是后期渲染过的
        $("#fuck-btn").click(function(){
            var type = $(this).data(&#39;type&#39;);
            active[type] ? active[type].call(this) : &#39;&#39;;
        });
        $("#reloadtable").click(function(){
            active.reload();
        });
        $("#reloadpage").click(function(){
            location.reload();
        });
    });
</script>
</body>
</html>
로그인 후 복사

后端php代码

  • order.php(订单控制器,部分业务代码不用太深究)

    // 订单列表
    public function orderList()
    {
        // 动态渲染前台表格
        $operating = $this->request->getPost(&#39;getlist&#39;, &#39;trim&#39;);
        // 首次这里不会执行,数据表开始渲染的时候才会请求以下部分
        if (&#39;orderlist&#39; === $operating) {
            // 进行分页查询
            $page = $this->request->getPost(&#39;page&#39;, &#39;intval&#39;, 1);
            $limit = $this->request->getPost(&#39;limit&#39;, &#39;intval&#39;, 10);
            $start = ($page - 1) * $limit;

            // 如果有其他条件查询在这里可以带上
            $merchant_no = $this->request->getPost(&#39;merchant_no&#39;, &#39;trim&#39;, &#39;&#39;);
            $order_no = $this->request->getPost(&#39;order_no&#39;, &#39;trim&#39;, &#39;&#39;);
            $start_time = $this->request->getPost(&#39;start_time&#39;, &#39;trim&#39;, date("Y-m-d H:i:s", strtotime("-1 day")));
            $end_time = $this->request->getPost(&#39;end_time&#39;, &#39;trim&#39;, date("Y-m-d H:i:s"), time());

            // 获取符合条件的记录数量
            if($GLOBALS[&#39;SESSION&#39;][&#39;admin_group_id&#39;] >1){
                $merchant_no = $GLOBALS[&#39;SESSION&#39;][&#39;admin_username&#39;];
            }
            $order_nums = orders::getItemNums($merchant_no, $order_no, $start_time, $end_time);

            // 分页进行查询条件记录
            $order_list = orders::getItem($merchant_no, $order_no, $start_time, $end_time, $start, $limit);
            $datas = [&#39;code&#39; => 0, &#39;msg&#39; => &#39;&#39;];
            // 将总的记录条数传给前台进行渲染分页
            $datas[&#39;count&#39;] = $order_nums;
            // 重新过滤一遍数据,很多没有用到的不能全部发给试图,尤其是动态渲染的,很容易暴露,建议加工一下再传
            foreach ($order_list as $k => $v) {
                $order_list[$k][&#39;orderno&#39;] = $v[&#39;order_id&#39;];
                $order_list[$k][&#39;user_orderno&#39;] = $v[&#39;order_no&#39;];
                $order_list[$k][&#39;username&#39;] = $v[&#39;merchant_no&#39;];
                $order_list[$k][&#39;pay_type&#39;] = ($v[&#39;pay_type&#39;] == 1) ? "支付宝扫码" : "微信扫码";
                $order_list[$k][&#39;pay_status&#39;] = ($v[&#39;callback_status&#39;] > 0) ? "已支付" : "未支付";
                $order_list[$k][&#39;pay_time&#39;] = $v[&#39;callback_time&#39;];
                $order_list[$k][&#39;notice_result&#39;] = ($v[&#39;push_status&#39;] > 0) ? "<span class=\"layui-badge layui-bg-blue\">已推送</span>" : "<span class=\"layui-badge layui-bg-gray\">未推送</span>";
            }
            // 将数据通过json格式响应给前台渲染
            $datas[&#39;data&#39;] = $order_list;
            echo json_encode($datas);
            safe_exit();
        }
        // 首次先现实模板页
        self::$view->render(&#39;orders_orderlist&#39;);
    }
로그인 후 복사

数据格式请参照官方指导:数据接口格式,表格模块
调试的时候可以打开chrome,firefoxconsolenetwork进行查看,仔细研究分析

数据表工具条事件

工具栏是指在行单元格内可以操作对应的行,因为使用layui的元素监听,很容易就获取到相应对应整行的数据.
比如获取表单的数据,只需要监听表单提交事件,直接就可以一次获取到所有的参数和值:

<script>
    layui.use([&#39;form&#39;,&#39;jquery&#39;],function(){
       let form = layui.form,
            $ = layui.$;
        form.on(&#39;submit(fuck-submit)&#39;, function(data){
            if(data.field.password  && data.field.password.length < 5){
                layer.msg(&#39;密码不能小于5位&#39;);
                return false;
            }
            $.post(&#39;index.php?&a=adminEdit&op=update&uid=&#39;+data.field.uid,{
                    username:data.field.username,
                    password:data.field.password,
                    level:data.field.level,
                    is_enabled:data.field.is_enabled
                }, function(responseText){
                    //console.log(responseText);
                    if(responseText.errno === 8){
                        layer.msg(responseText.errstr,{icon:6});
                        return false;
                    } else {
                        layer.msg(responseText.errstr,{icon:5});
                        location.reload();
                    }
                },&#39;json&#39;
            );
            return false;
        });
    });
</script>
로그인 후 복사

这里是官方文档的:

form.on(&#39;submit(*)&#39;, function(data){
  console.log(data.elem) //被执行事件的元素DOM对象,一般为button对象
  console.log(data.form) //被执行提交的form对象,一般在存在form标签时才会返回
  console.log(data.field) //当前容器的全部表单字段,名值对形式:{name: value}
  return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。
});
로그인 후 복사

我们今天要操作的数据表也是要采用这种方式,首先我们看看看怎样生成和渲染出工具条:
layui는 동적 및 정적 데이터 테이블의 페이징을 구현합니다.

只需要在body部分插入一个容器,注意这里的javascripttypetext/html,这个是供layui解析用的,在这里的d也就是我们在渲染表格的时候的数据,所有的字段的值都可以在这个d里面获取到

    <table class="layui-hide" lay-filter="fucktest" id="test"></table>
    <script type="text/html" id="barDemo">
        <a class="layui-btn layui-btn-xs" user_id="{{d.admin_id}}" lay-event="edit">编辑</a>
    </script>
로그인 후 복사
 // 这里就是我们渲染表格字段的地方,和上面的容器进行绑定,容器里面可以通过d.fixed来获取到
 {fixed: &#39;right&#39;, width:158,title:&#39;操作&#39;, align:&#39;center&#39;, toolbar: &#39;#barDemo&#39;}
로그인 후 복사

然后我们就可以对工具条绑定事件了,这里我只使用了编辑事件

table.on(&#39;tool(fucktest)&#39;, function(obj){ //注:tool是工具条事件名,test是table原始容器的属性 lay-filter="对应的值"
            var data = obj.data; //获得当前行数据
            var layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)
            var tr = obj.tr; //获得当前行 tr 的DOM对象

            if(layEvent === &#39;detail&#39;){ //查看
                //do somehing
            } else if(layEvent === &#39;del&#39;){ //删除
                layer.confirm(&#39;真的删除行么&#39;, function(index){
                    obj.del(); //删除对应行(tr)的DOM结构,并更新缓存
                    layer.close(index);
                    //向服务端发送删除指令
                });
            } else if(layEvent === &#39;edit&#39;){ //编辑
                    // 开始根据用户id来进行获取用户进入新窗口
                var index = layer.open({
                    type: 2,
                    title:&#39;编辑管理员&#39;,
                    area: [&#39;700px&#39;, &#39;560px&#39;],
                    maxmin: true,
                    content: &#39;index.php?c=adminUser&a=editUser&uid=&#39;+data.admin_id
                });
                layer.full(index);

            }
        })
로그인 후 복사

这样在点击编辑之后就能激活对应的事件了,我们这里是打开新的一个全屏弹窗来修改管理员资料
layui는 동적 및 정적 데이터 테이블의 페이징을 구현합니다.

在修改完成后,如果只是单纯的重载数据表可以使用我们前面使用的方式,如果是刷新页面直接使用location.reload()

       // 重载数据表
       var active = {
            reload:function(){
                var demoReload = $("#demoReload");
                var dateReload = $("#dateReload");
                table.reload(&#39;testReload&#39;,{
                    where:{
                        username:demoReload.val(),
                        dates:dateReload.val()
                    }
                });
            }
        };
        $("#fresh-btn").click(function(){active.reload();});
        $("#fresh-page-btn").click(function(){location.reload();});
로그인 후 복사

这里是官方的例子 toolbar-绑定列工具条

toolbar 对应的模板,它可以存放在页面的任意位置:

  <script type="text/html" id="barDemo">
  <a class="layui-btn layui-btn-xs" lay-event="detail">查看</a>
  <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
  <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
  
  <!-- 这里同样支持 laytpl 语法,如: -->
  {{#  if(d.auth > 2){ }}
    <a class="layui-btn layui-btn-xs" lay-event="check">审核</a>
  {{#  } }}
</script>
 
注意:属性 lay-event="" 是模板的关键所在,值可随意定义。
로그인 후 복사

渲染工具条:

table.render({
  cols: [[
    {field:&#39;id&#39;, title:&#39;ID&#39;, width:100}
    ,{fixed: &#39;right&#39;, width:150, align:&#39;center&#39;, toolbar: &#39;#barDemo&#39;} //这里的toolbar值是模板元素的选择器
  ]]
});
 
等价于:
<th lay-data="{field:&#39;id&#39;, width:100}">ID</th>
<th lay-data="{fixed: &#39;right&#39;, width:150, align:&#39;center&#39;, toolbar: &#39;#barDemo&#39;}"></th>
로그인 후 복사

工具条绑定事件:

//监听工具条
table.on(&#39;tool(test)&#39;, function(obj){ //注:tool是工具条事件名,test是table原始容器的属性 lay-filter="对应的值"
  var data = obj.data; //获得当前行数据
  var layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)
  var tr = obj.tr; //获得当前行 tr 的DOM对象
 
  if(layEvent === &#39;detail&#39;){ //查看
    //do somehing
  } else if(layEvent === &#39;del&#39;){ //删除
    layer.confirm(&#39;真的删除行么&#39;, function(index){
      obj.del(); //删除对应行(tr)的DOM结构,并更新缓存
      layer.close(index);
      //向服务端发送删除指令
    });
  } else if(layEvent === &#39;edit&#39;){ //编辑
    //do something
    
    //同步更新缓存对应的值
    obj.update({
      username: &#39;123&#39;
      ,title: &#39;xxx&#39;
    });
  }
});
로그인 후 복사

更加详细的介绍请仔细研读官方文档 layui table模块

静态表格和分页

在很多时候在pc端过多的使用动态渲染不是一个明智的选择,比如稍微懂行的人都能看到你的API和需要的param,所以我们还是建议对安全要求比较高的程序上还是使用静态表格,通过模板引擎也好,还是直接使用使用后端动态语言混合,用户最终只能看到解析好的页面,对程序保护也是很有必要的,我的一个hacker朋友在进行渗透的时候都是这样进行钻空子的

静态表格我这里直接是使用php混合解析进行展示:
前端模板:

  • index.php

<?php $this->import(&#39;head&#39;);?>
<body>
<blockquote class="layui-elem-quote">注意:此处仅显示部分日志</blockquote>
<table class="layui-table" lay-size="sm">
    <colgroup>
    </colgroup>
    <thead>
    <tr>
        <th>日志ID</th>
        <th>操作用户</th>
        <th>操作</th>
        <th>控制器</th>
        <th>方法</th>
        <th>是否成功</th>
        <th>操作IP</th>
        <th>备注信息</th>
        <th>日期</th>
    </tr>
    </thead>
    <tbody>
    <?php foreach($log_list as $kk => $vv):?>
    <tr>
        <td><?php echo $vv[&#39;log_id&#39;];?></td>
        <td><?php echo $vv[&#39;username&#39;];?></td>
        <td><?php echo $vv[&#39;title&#39;];?></td>
        <td><?php echo $vv[&#39;control&#39;];?></td>
        <td><?php echo $vv[&#39;action&#39;];?></td>
        <td><?php echo $vv[&#39;is_success&#39;];?></td>
        <td><?php echo $vv[&#39;client_ip&#39;];?></td>
        <td><?php echo $vv[&#39;remark&#39;];?></td>
        <td><?php echo $vv[&#39;date&#39;];?></td>
    </tr>
    <?php endforeach;?>
    </tbody>
</table>
<p id="test1"></p>
<script src="js/layui/layui.js"></script>
<script>
    layui.use(&#39;laypage&#39;, function(){
        var laypage = layui.laypage;
        laypage.render({
            elem: &#39;test1&#39; //注意,这里的 test1 是 ID,不用加 # 号
            ,count: <?php echo $log_num;?> // 数据总数,从服务端得到
            ,curr: <?php echo $currpage;?> // 服务器端回传当前页
            ,jump: function(obj, first){
                //obj包含了当前分页的所有参数,比如:
                console.log(obj.curr);  //得到当前页,以便向服务端请求对应页的数据。
                console.log(obj.limit); //得到每页显示的条数
                //首次不执行,使用原始的curr,后面需要自己通过回传来更新
                var curr = obj.curr;
                if(!first){
                    location.href=&#39;index.php?&a=adminLogList&page=&#39;+obj.curr;
                }
            }
        });
    });
</script>

</body>
<?php $this->import(&#39;foot&#39;);?>
로그인 후 복사

这里的原理非常简单,主要利用的是layui下的laypage模块,使用jump

layui를 기반으로 테스트되었습니다. 동적 데이터 테이블

동적 데이터 테이블 렌더링

그림 설명

    구현 과정

  • 비즈니스 로직은 댓글에 모두 적어두었습니다 . 이렇게 하면 모두가 잠시 동안 코드와 지침을 읽음으로써 쉽게 주의가 산만해지는 것을 피할 수 있습니다.

    프런트엔드 코드:🎜🎜🎜🎜head.phtml(헤더 파일 코드) 🎜
  •    public function adminLogList()
        {   // 接收当前页,如果没有收到默认是第一页
            $page = $this->request->getGet(&#39;page&#39;,&#39;intval&#39;,1);
            // 设置limit查找起始,DEFAULT_PER_PAGE为全局变量,设置的是每页显示10条
            $start = ($page-1)*DEFAULT_PER_PAGE;
            // 获取总日志数量
            $adminlog_num = adminLogs::getItemsNumber();
            // 分页查找,其他查询条件暂时不传
            $admin_log_list = adminLogs::getItems(&#39;&#39;,&#39;&#39;,&#39;&#39;,&#39;&#39;,&#39;&#39;,$start);
            $log_list = array();
            foreach($admin_log_list as $kk => $vv){
                if($vv[&#39;admin_id&#39;] > 0){
                    try{
                        $admins = admins::getItemById($vv[&#39;admin_id&#39;]);
                        $log_list[$kk][&#39;username&#39;] = $admins[&#39;username&#39;];
                    } catch (exception2 $e){
                        logexception($e->format_stack_trace());
                    }
                } else {
                    $log_list[$kk][&#39;username&#39;] = &#39;Tourists&#39;;
                }
                $log_list[$kk][&#39;log_id&#39;] = $vv[&#39;log_id&#39;];
                $log_list[$kk][&#39;control&#39;] = $vv[&#39;control&#39;];
                $log_list[$kk][&#39;action&#39;] = $vv[&#39;action&#39;];
                $log_list[$kk][&#39;is_success&#39;] = $vv[&#39;is_success&#39;];
    
                $log_list[$kk][&#39;client_ip&#39;] = ip2location($vv[&#39;client_ip&#39;]);
                $log_list[$kk][&#39;remark&#39;] = $vv[&#39;remark&#39;];
                $log_list[$kk][&#39;date&#39;] = $vv[&#39;date&#39;];
                $log_list[$kk][&#39;title&#39;] = $vv[&#39;title&#39;];
                unset($admin_log_list[$kk]);
            }
            self::$view->setVar(&#39;currpage&#39;,$page);
            self::$view->setVar(&#39;log_num&#39;,$adminlog_num);
            self::$view->setVar(&#39;log_list&#39;,$log_list);
            self::$view->render(&#39;default_addloglist&#39;);
        }
    로그인 후 복사
    로그인 후 복사
    🎜🎜🎜order_orderlist.phtml (주 비즈니스 코드) 🎜
rrreee🎜백엔드 PHP 코드🎜🎜🎜🎜order.php ( 주문 컨트롤러, 비즈니스의 일부 코드를 너무 깊이 파고들 필요가 없습니다) 🎜rrreee🎜데이터 형식에 대한 공식 지침을 참조하세요: 데이터 인터페이스 형식, 테이블 모듈
디버깅할 때 , chrome을 열고 Firefox의 <code>콘솔네트워크를 확인하고 주의 깊게 연구하고 분석할 수 있습니다🎜

데이터 테이블 툴바 이벤트

🎜툴바는 행 단위를 의미합니다. layui의 요소 모니터링을 사용하면 그에 해당하는 데이터를 쉽게 얻을 수 있기 때문에 그리드에서 해당 행을 조작할 수 있습니다.
예를 들어 양식의 데이터를 얻으려면 양식 제출 이벤트만 모니터링하면 되며 모든 매개변수와 값을 한 번에 직접 얻을 수 있습니다. 🎜rrreee🎜다음은 다음과 같습니다. 공식 문서: 🎜rrreee🎜오늘 작업할 데이터 테이블도 이 방법을 사용합니다. 먼저 도구를 생성하고 렌더링하는 방법을 살펴보겠습니다. 기사:
 이미지 설명 🎜🎜본문 부분에 컨테이너만 삽입하면 됩니다. 여기서 javascripttype text/html입니다. layui 구문 분석. 여기서 d는 테이블을 렌더링할 때의 데이터입니다. 이 d는 🎜rrreeerrreee🎜에 포함될 수 있으며 바인딩할 수 있습니다. 여기서는 편집 이벤트 🎜rrreee🎜만 사용하여 편집을 클릭하면 해당 이벤트가 활성화됩니다. 여기서는 관리자 정보를 수정할 수 있는 새로운 전체 화면 팝업 창이 열립니다.
사진 설명🎜🎜수정이 완료된 후 데이터 테이블을 새로 로드하면 앞서 사용한 방법을 사용할 수 있습니다. 페이지를 직접 location.reload() 사용합니다. 툴바: 🎜rrreee🎜툴바 바인딩 이벤트: 🎜rrreee🎜자세한 소개는 공식 문서layui 테이블 모듈을 주의 깊게 읽어보시기 바랍니다🎜

정적 테이블 및 페이징

🎜pc</에서 많은 경우 코드> 측에서 동적 렌더링을 과도하게 사용하는 것은 현명한 선택이 아닙니다. 예를 들어 약간의 지식만 있으면 누구나 <code>API 및 필수 param을 볼 수 있으므로 여전히 권장합니다. 보안 요구 사항이 상대적으로 높은 프로그램은 템플릿 엔진을 통해서든 백엔드 동적 언어 혼합을 직접 사용하든 여전히 정적 테이블을 사용해야 하며 결국 사용자는 구문 분석된 페이지만 볼 수 있으며 프로그램 보호도 필요합니다. code>hacker 내 친구는 침투할 때 항상 이와 같은 허점을 이용합니다. 🎜🎜저는 php 하이브리드 구문 분석을 직접 사용하여 여기에 정적 양식을 표시합니다:
프런트 엔드 템플릿 :🎜🎜🎜🎜index.php🎜rrreee🎜 여기서의 원리는 매우 간단합니다. 주로 layui 아래의 laypage 모듈을 사용합니다. 이벤트를 트리거하는 점프🎜🎜🎜🎜adminLogList 메소드:🎜
   public function adminLogList()
    {   // 接收当前页,如果没有收到默认是第一页
        $page = $this->request->getGet(&#39;page&#39;,&#39;intval&#39;,1);
        // 设置limit查找起始,DEFAULT_PER_PAGE为全局变量,设置的是每页显示10条
        $start = ($page-1)*DEFAULT_PER_PAGE;
        // 获取总日志数量
        $adminlog_num = adminLogs::getItemsNumber();
        // 分页查找,其他查询条件暂时不传
        $admin_log_list = adminLogs::getItems(&#39;&#39;,&#39;&#39;,&#39;&#39;,&#39;&#39;,&#39;&#39;,$start);
        $log_list = array();
        foreach($admin_log_list as $kk => $vv){
            if($vv[&#39;admin_id&#39;] > 0){
                try{
                    $admins = admins::getItemById($vv[&#39;admin_id&#39;]);
                    $log_list[$kk][&#39;username&#39;] = $admins[&#39;username&#39;];
                } catch (exception2 $e){
                    logexception($e->format_stack_trace());
                }
            } else {
                $log_list[$kk][&#39;username&#39;] = &#39;Tourists&#39;;
            }
            $log_list[$kk][&#39;log_id&#39;] = $vv[&#39;log_id&#39;];
            $log_list[$kk][&#39;control&#39;] = $vv[&#39;control&#39;];
            $log_list[$kk][&#39;action&#39;] = $vv[&#39;action&#39;];
            $log_list[$kk][&#39;is_success&#39;] = $vv[&#39;is_success&#39;];

            $log_list[$kk][&#39;client_ip&#39;] = ip2location($vv[&#39;client_ip&#39;]);
            $log_list[$kk][&#39;remark&#39;] = $vv[&#39;remark&#39;];
            $log_list[$kk][&#39;date&#39;] = $vv[&#39;date&#39;];
            $log_list[$kk][&#39;title&#39;] = $vv[&#39;title&#39;];
            unset($admin_log_list[$kk]);
        }
        self::$view->setVar(&#39;currpage&#39;,$page);
        self::$view->setVar(&#39;log_num&#39;,$adminlog_num);
        self::$view->setVar(&#39;log_list&#39;,$log_list);
        self::$view->render(&#39;default_addloglist&#39;);
    }
로그인 후 복사
로그인 후 복사

最终效果,已经完成静态分页,此部分功能也适用于信息类网站:
layui는 동적 및 정적 데이터 테이블의 페이징을 구현합니다.

相关推荐:

layui实现动态和静态分页


위 내용은 layui는 동적 및 정적 데이터 테이블의 페이징을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿