当前位置:首页 > PHP教程 > php应用 > 列表

php+layui数据表格实现数据分页渲染代码

发布:smiling 来源: PHP粉丝网  添加日期:2022-01-18 22:02:26 浏览: 评论:0 

今天小编就为大家分享一篇php+layui数据表格实现数据分页渲染代码,具有很好的参考价值,希望对大家有所帮助,一起跟随小编过来看看吧。

一、HTML

<table class="layui-hide layui-table" id="spu-data"></table>

二、JS

说明:需要引入layui中的table和laytpl模板引擎,laytpl可以自定义事件及自定义数据字段等

  1. <!-- 拼接图片 --> 
  2. <script type="text/html" id="pimg"
  3.  <img class="img" onmouseover="divIn(event)" onmouseout="divOut(event)" onmousemove="divIn(event)" src="__PUBLIC__/{{d.pimgurl}}t_{{d.pimgname}}" alt=""
  4. </script> 
  5.  
  6. <!-- 查看详情按钮 --> 
  7. <script type="text/html" id="spu_detail"
  8.  <button class="layui-btn layui-btn-xs layui-btn-primary spu_detail" artnum="{{d.artnum}}" value="{{d.basic_id}}" onclick="spuDetail(event)">查看详情</button> 
  9. </script> 
  10.  
  11. <script type="text/html" id="hotcake_color"
  12.  {{# if (d.hotcake === '超级爆款') { }}  
  13.   <span style="display: block;background-color: #CCFFCC;">{{ d.hotcake }}</span> 
  14.  {{# } else if(d.hotcake === '大爆款') { }}  
  15.   <span style="display: block;background-color: #99CCCC;">{{ d.hotcake }}</span>  
  16.  {{# } else if(d.hotcake === '小爆款') { }}  
  17.   <span style="display: block;background-color: #FFCCCC;">{{ d.hotcake }}</span>  
  18.  {{# } else if(d.hotcake === '热销款') { }}  
  19.   <span style="display: block;background-color: #FFFFCC;">{{ d.hotcake }}</span>  
  20.  {{# } else { }}  
  21.   <span style="display: block;background-color: #CCFFFF;">{{ d.hotcake }}</span>  
  22.  {{# } }}  
  23. </script> 
  24.  
  25. <script type="text/javascript"
  26.  
  27. layui.use(['form','laydate','layer','table','laytpl'],function(){ 
  28.  var laydate = layui.laydate; 
  29.  var layer = layui.layer; 
  30.  var table = layui.table; 
  31.  var laytpl = layui.laytpl; 
  32.  
  33.   //---SPU数据--------------------------------------------- 
  34.  var spu_table = table.render({ 
  35.   elem: '#spu-data',   //html中table窗口的id 
  36.   height: 800, 
  37.   url: '__URL__/spu_data'//后台接口 
  38.   toolbar: true, 
  39.   loading: true, 
  40.   text: { 
  41.    none: '空空如也' 
  42.   }, 
  43.   title: 'spu数据'
  44.   size: 'sm'
  45.   page: { 
  46.    layout: ['count''prev''page''next''limit''refresh''skip'], 
  47.    limit: 20, 
  48.    limits: [20,30,50,100,200,5000] 
  49.   }, 
  50.   cols: [[ 
  51.     {field:'n', title: 'i', width: 55}, 
  52.     {field:'', title: '图', width: 31, templet: '#pimg'},     // templet 引用laytpl中的自定义模板 
  53.     {field:'', title: '查看详情', width: 120, templet: '#spu_detail'},  // 引用laytpl中的自定义模板 
  54.     {field:'artnum', title: '货号', sort: true}, 
  55.     {field:'gcolor', title: '颜色组', sort: true}, 
  56.     {field:'cate', title: '品类', sort: true}, 
  57.     {field:'price', title: '业绩', sort: true}, 
  58.     {field:'sales', title: '销量', sort: true}, 
  59.     {field:'hotcake', title: '热销程度', templet: '#hotcake_color', sort: true}, 
  60.     {field:'sumcost', title: '商品成本', sort: true} 
  61.   ]] 
  62.  }); 
  63.  
  64. // 搜索重载数据 
  65.  $('#spudata_search').click(function(){ 
  66.   // 获取日期的值 
  67.   var date = $('#spusearch_date').val(); 
  68.   if (!date) { 
  69.    layer.msg('请选择日期区间搜索', { 
  70.     time: 2000 
  71.    }); 
  72.    return false; 
  73.   } 
  74.  
  75.   var perfor_val = $('#perfor_val').val();; 
  76.   var hot_type = $('#hot_type').val(); 
  77.   var artnum = $('#artnum').val(); 
  78.   var cate_id = $('#cate_id').val(); 
  79.  
  80.   // 只选其一条件 
  81.   if (perfor_val && hot_type) { 
  82.    layer.msg('业绩区间和爆款类型只选其一', { 
  83.     time: 2000 
  84.    }); 
  85.    return false; 
  86.   } 
  87.  
  88.   // 数据重载 
  89.   spu_table.reload({ 
  90.    // 发送条件 
  91.    where: { 
  92.     artnum: artnum, 
  93.     perfor_val: perfor_val, 
  94.     hot_type: hot_type, 
  95.     cate_id: cate_id, 
  96.     datedate
  97.     act: 'reload' 
  98.    }, 
  99.    page: { 
  100.     layout: ['count''prev''page''next''limit''refresh''skip'], 
  101.     curr: 1 
  102.    } 
  103.   }); 
  104.  
  105.  }) 
  106.  
  107. })  
  108. </script> 

三、PHP

  1. #这里是PHP类中主要的配合步骤 
  2.  
  3. # 接收layui发送的limit 
  4. if (trim($_GET['limit'])) { 
  5.  $limit = trim($_GET['limit']); 
  6. }else
  7.  $limit = 15; 
  8.  
  9. # 按某字段排序,$rows为数据数组 
  10. $sort_num = array_column($rows,'num'); 
  11. array_multisort($sort_num,SORT_DESC,$rows, SORT_DESC); 
  12.  
  13. # 调用自定义分页函数 
  14. $datas = array(); 
  15. $datas = showpage($rows,$limit); 
  16.  
  17. $items = array(); 
  18.  
  19. # 返回layui数据格式 
  20. $items['data'] = $datas['rows']; 
  21. $items['code'] = 0; 
  22. $items['msg'] = 'ok'
  23. $items['count'] = $datas['tot']; 
  24.  
  25. exit(json_encode($items)); 
  26.  
  27. # showpage函数 
  28.  
  29. function showpage($rows,$count){  
  30.  $tot = count($rows); // 总数据条数 
  31.  
  32.  if ($_GET['page']) { //获取当前页码 
  33.   $page = $_GET['page']; 
  34.  }else
  35.   $page = 1; 
  36.  } 
  37.  
  38.  // $count = $count; # 每页显示条数 
  39.  
  40.  $countpage = ceil($tot/$count); # 计算总共页数 
  41.  
  42.  $start = ($page-1)*$count; # 计算每页开始位置 
  43.  
  44.  $datas = array_slice($rows$start$count); # 计算当前页数据 
  45.  
  46.  # 获取上一页和下一页 
  47.  if ($page > 1) { 
  48.   $uppage = $page-1; 
  49.  }else
  50.   $uppage = 1; 
  51.  } 
  52.  
  53.  if ($page < $countpage) { 
  54.   $nextpage = $page+1; 
  55.  }else
  56.   $nextpage = $countpage
  57.  } 
  58.  
  59.  $pages['countpage'] = $countpage
  60.  $pages['page'] = $page
  61.  $pages['uppage'] = $uppage
  62.  $pages['nextpage'] = $nextpage
  63.  $pages['tot'] = $tot
  64.  
  65.  //循环加入序号 , 避免使用$i引起的序号跳位 
  66.  $n = 1; 
  67.  foreach ($datas as &$data) { 
  68.   $data['n'] = $n
  69.   $n++; 
  70.  } 
  71.    
  72.  $pages['rows'] = $datas
  73.  
  74.  return $pages
  75. }

Tags: php+layui layui分页渲染

分享到: