Rumah > hujung hadapan web > tutorial js > layui实现动态和静态分页

layui实现动态和静态分页

不言
Lepaskan: 2018-04-28 10:30:08
asal
2785 orang telah melayarinya

本篇文章通过实例给大家分享了layui实现动态和静态分页的详细方法,以及效果展示,有需要的朋友可以跟着参考学习下。

开发管理后台是每一个开发人员都要熟悉的一个环节,作为后端程序员,公司的所有机密数据都掌握在我们手上,所以这个时候,如果不是公司的核心成员,是不能接触到某些数据的,这个时候所有的工作都落到了我们的手上,从PS到Linux都需要我们亲历亲为,还好发现了layui这个前端框架,很大程度上减轻了我们的压力.

今天我们先来学习一下layui实现动态数据表,静态数据表,以及表格的分页,其中还涉及到动态刷新数据表,数据表工具栏使用,表单提交等功能,这个静态分页同样适用在信息类网站,我的工作开发环境是debian桌面版,所以所有的实验也是在debian基础上测试

layui动态数据表

动态数据表的效果图

实现过程

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

前端代码:

head.phtml(头文件代码)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<!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" rel="external nofollow" media="all">

  <link rel="stylesheet" href="static/css/globals.css" rel="external nofollow" 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">

Salin selepas log masuk

order_orderlist.phtml(主体业务代码)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

<?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"></i>查询</button>

      <button id="reloadtable" class="layui-btn layui-btn-normal"><i class="layui-icon">ဂ</i>刷新数据</button>

      <button id="reloadpage" class="layui-btn layui-btn-normal"><i class="layui-icon">ဂ</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>

Salin selepas log masuk

后端php代码

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

// 订单列表

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

}

Salin selepas log masuk

数据格式请参照官方指导:

数据接口格式

1

{"code":0,"msg":"","count":1000,"data":[{"id":10000,"username":"user-0","sex":"女","city":"城市-0","sign":"签名-0","experience":255,"logins":24,"wealth":82830700,"classify":"作家","score":57},{"id":10001,"username":"user-1","sex":"男","city":"城市-1","sign":"签名-1","experience":884,"logins":58,"wealth":64928690,"classify":"词人","score":27},{"id":10002,"username":"user-2","sex":"女","city":"城市-2","sign":"签名-2","experience":650,"logins":77,"wealth":6298078,"classify":"酱油","score":31},{"id":10003,"username":"user-3","sex":"女","city":"城市-3","sign":"签名-3","experience":362,"logins":157,"wealth":37117017,"classify":"诗人","score":68},{"id":10004,"username":"user-4","sex":"男","city":"城市-4","sign":"签名-4","experience":807,"logins":51,"wealth":76263262,"classify":"作家","score":6},{"id":10005,"username":"user-5","sex":"女","city":"城市-5","sign":"签名-5","experience":173,"logins":68,"wealth":60344147,"classify":"作家","score":87},{"id":10006,"username":"user-6","sex":"女","city":"城市-6","sign":"签名-6","experience":982,"logins":37,"wealth":57768166,"classify":"作家","score":34},{"id":10007,"username":"user-7","sex":"男","city":"城市-7","sign":"签名-7","experience":727,"logins":150,"wealth":82030578,"classify":"作家","score":28},{"id":10008,"username":"user-8","sex":"男","city":"城市-8","sign":"签名-8","experience":951,"logins":133,"wealth":16503371,"classify":"词人","score":14},{"id":10009,"username":"user-9","sex":"女","city":"城市-9","sign":"签名-9","experience":484,"logins":25,"wealth":86801934,"classify":"词人","score":75},{"id":10010,"username":"user-10","sex":"女","city":"城市-10","sign":"签名-10","experience":1016,"logins":182,"wealth":71294671,"classify":"诗人","score":34},{"id":10011,"username":"user-11","sex":"女","city":"城市-11","sign":"签名-11","experience":492,"logins":107,"wealth":8062783,"classify":"诗人","score":6},{"id":10012,"username":"user-12","sex":"女","city":"城市-12","sign":"签名-12","experience":106,"logins":176,"wealth":42622704,"classify":"词人","score":54},{"id":10013,"username":"user-13","sex":"男","city":"城市-13","sign":"签名-13","experience":1047,"logins":94,"wealth":59508583,"classify":"诗人","score":63},{"id":10014,"username":"user-14","sex":"男","city":"城市-14","sign":"签名-14","experience":873,"logins":116,"wealth":72549912,"classify":"词人","score":8},{"id":10015,"username":"user-15","sex":"女","city":"城市-15","sign":"签名-15","experience":1068,"logins":27,"wealth":52737025,"classify":"作家","score":28},{"id":10016,"username":"user-16","sex":"女","city":"城市-16","sign":"签名-16","experience":862,"logins":168,"wealth":37069775,"classify":"酱油","score":86},{"id":10017,"username":"user-17","sex":"女","city":"城市-17","sign":"签名-17","experience":1060,"logins":187,"wealth":66099525,"classify":"作家","score":69},{"id":10018,"username":"user-18","sex":"女","city":"城市-18","sign":"签名-18","experience":866,"logins":88,"wealth":81722326,"classify":"词人","score":74},{"id":10019,"username":"user-19","sex":"女","city":"城市-19","sign":"签名-19","experience":682,"logins":106,"wealth":68647362,"classify":"词人","score":51},{"id":10020,"username":"user-20","sex":"男","city":"城市-20","sign":"签名-20","experience":770,"logins":24,"wealth":92420248,"classify":"诗人","score":87},{"id":10021,"username":"user-21","sex":"男","city":"城市-21","sign":"签名-21","experience":184,"logins":131,"wealth":71566045,"classify":"词人","score":99},{"id":10022,"username":"user-22","sex":"男","city":"城市-22","sign":"签名-22","experience":739,"logins":152,"wealth":60907929,"classify":"作家","score":18},{"id":10023,"username":"user-23","sex":"女","city":"城市-23","sign":"签名-23","experience":127,"logins":82,"wealth":14765943,"classify":"作家","score":30},{"id":10024,"username":"user-24","sex":"女","city":"城市-24","sign":"签名-24","experience":212,"logins":133,"wealth":59011052,"classify":"词人","score":76},{"id":10025,"username":"user-25","sex":"女","city":"城市-25","sign":"签名-25","experience":938,"logins":182,"wealth":91183097,"classify":"作家","score":69},{"id":10026,"username":"user-26","sex":"男","city":"城市-26","sign":"签名-26","experience":978,"logins":7,"wealth":48008413,"classify":"作家","score":65},{"id":10027,"username":"user-27","sex":"女","city":"城市-27","sign":"签名-27","experience":371,"logins":44,"wealth":64419691,"classify":"诗人","score":60},{"id":10028,"username":"user-28","sex":"女","city":"城市-28","sign":"签名-28","experience":977,"logins":21,"wealth":75935022,"classify":"作家","score":37},{"id":10029,"username":"user-29","sex":"男","city":"城市-29","sign":"签名-29","experience":647,"logins":107,"wealth":97450636,"classify":"酱油","score":27}]}

Salin selepas log masuk

表格模块:http://www.layui.com/doc/modules/table.html

调试的时候可以打开chrome,firefox 的 console 和 network进行查看,仔细研究分析

数据表工具条事件

工具栏是指在行单元格内可以操作对应的行,因为使用layui的元素监听,很容易就获取到相应对应整行的数据.

比如获取表单的数据,只需要监听表单提交事件,直接就可以一次获取到所有的参数和值:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

<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>

Salin selepas log masuk

这里是官方文档的:

1

2

3

4

5

6

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; //阻止表单跳转。如果需要表单跳转,去掉这段即可。

});

Salin selepas log masuk

我们今天要操作的数据表也是要采用这种方式,首先我们看看看怎样生成和渲染出工具条:

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

1

2

3

4

<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>

Salin selepas log masuk

Atas ialah kandungan terperinci layui实现动态和静态分页. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan