【TP5项目统一规范】列表带分页查询

举报
原来是咔咔 发表于 2022/03/27 01:31:16 2022/03/27
【摘要】 author:咔咔 wechat:fangkangfk 整体思路步骤: 1.前端拼接js数据 2.使用layui分页 3.请求后台控制器 4.控制器将前端请求的页面,跟每页显示的数据传给server层 5.server层需要根据这俩个参数在模型里边带分页查询,并且查询返回总数据量 6.最后初始化返回给控制器的数据结构...

author:咔咔

wechat:fangkangfk

整体思路步骤:

1.前端拼接js数据

2.使用layui分页

3.请求后台控制器

4.控制器将前端请求的页面,跟每页显示的数据传给server层

5.server层需要根据这俩个参数在模型里边带分页查询,并且查询返回总数据量

6.最后初始化返回给控制器的数据结构

7.控制器接收到树结构返回json格式的给js即可

前台js拼接数据


  
  1. {include file="../../../application/admin/view/public/head" /}
  2. <div class="page-container p10">
  3. <div class="my-toolbar-box">
  4. <div class="layui-btn-group">
  5. <a data-full="1" data-href="{:url('info')}" class="layui-btn layui-btn-primary j-iframe"><i class="layui-icon">&#xe654;</i>添加</a>
  6. </div>
  7. </div>
  8. <form class="layui-form " method="post" id="pageListForm">
  9. <table class="layui-table" lay-size="sm">
  10. <thead>
  11. <tr>
  12. <th width="25">ID</th>
  13. <th width="50">分类名</th>
  14. <th width="50">标题</th>
  15. <th width="40">横竖屏</th>
  16. <th width="40">专题类型</th>
  17. <th width="40">排序</th>
  18. <th width="80">是否首页推荐</th>
  19. <th width="120">支持开关</th>
  20. <th width="130">操作</th>
  21. </tr>
  22. </thead>
  23. <tbody id="tab_list"></tbody>
  24. </table>
  25. </form>
  26. </div>
  27. {include file="../../../application/admin/view/public/foot" /}
  28. <div id="pages" class="center"></div>
  29. <script type="text/javascript">
  30. window.onload= function () {
  31. loadData(); //请求数据
  32. getPage(); //分页操作
  33. }
  34. var page=1; //设置首页页码
  35. var limit=1; //设置一页显示的条数
  36. var total; //总条数
  37. function loadData(){
  38. $.ajax({
  39. type:"post",
  40. url:"{url(Subject/index)}",//对应controller的URL
  41. async:false,
  42. dataType: 'json',
  43. data:{
  44. "page_index":page,
  45. "page_size":limit,
  46. },
  47. success:function(ret){
  48. total=ret.total_count;
  49. var data1=ret.data;
  50. var html= '';
  51. for(var i=0;i<data1.length;i++){
  52. html+='<tr>';
  53. html+='<td>'+ data1[i].vs_id +'</td>';
  54. html+='<td>'+ data1[i]['video_type']['vt_name'] +'</td>';
  55. html+='<td>'+ data1[i]['vs_title'] +'</td>';
  56. html+='<td>'+ data1[i]['vs_isLandscape'] +'</td>';
  57. html+='<td>'+ data1[i]['vs_type'] +'</td>';
  58. html+='<td>'+ data1[i]['vs_sort'] +'</td>';
  59. html+='<td>'+ data1[i]['vs_recommend'] +'</td>';
  60. html+='<td>'+ data1[i]['vs_supportSwitch'] +'</td>';
  61. html+='<td>';
  62. html+='<a class="layui-badge-rim j-iframe" data-full="1" data-href='+ROOT_PATH+'/index.php/admin/banner/editBanner?b_id='+data1[i]['b_id']+' "href="javascript:;" title="编辑">编辑</a>';
  63. html+='<a class="layui-badge-rim j-tr-del del" data-href='+ROOT_PATH+'/index.php/admin/banner/delBanner?b_id='+data1[i]['b_id']+' href="javascript:;" title="删除">删除</a>';
  64. html+='</td>';
  65. html+='</tr>';
  66. }
  67. $("#tab_list").html(html);
  68. }
  69. });
  70. }
  71. function getPage(){
  72. layui.use('laypage', function(){
  73. var laypage = layui.laypage
  74. , layer = layui.layer;
  75. laypage.render({
  76. elem: 'pages'
  77. ,count: total //数据总数,从服务端得到
  78. ,limit:10
  79. ,jump: function(obj, first){
  80. page=obj.curr; //改变当前页码
  81. limit=obj.limit;
  82. loadData()
  83. }
  84. });
  85. });
  86. }
  87. $(document).on('click','.del',function(){
  88. var that = $(this),
  89. href = !that.attr('data-href') ? that.attr('href') : that.attr('data-href');
  90. layer.confirm('删除之后无法恢复,您确定要删除吗?', {title:false, closeBtn:0}, function(index){
  91. if (!href) {
  92. layer.msg('请设置data-href参数');
  93. return false;
  94. }
  95. $.get(href, function(res){
  96. layer.msg(res.msg);
  97. if (res.code == 1) {
  98. that.parents('tr').remove();
  99. }
  100. });
  101. layer.close(index);
  102. });
  103. return false;
  104. })
  105. </script>
  106. </body>
  107. </html>

这里我复制了一份源码下来分解解释:

首先需要ajax请求,去后台获取数据,刚刚开始不需要关心后台怎么写

然后我们需要一个存放数据的地方,看上图我们把最终的html变量存放到了#tab_list中,所以我们需要在html里边创建一个id为他的标签

下来就是引入layui分页

这个总数据量是后台过来的,我们在最顶部设置了一个total的变量,在ajax请求后会把这个参数返回回来,这里是检测页面的变动,并将页码跟页面显示数量给loaddata()请求数据

写到这里分页的效果是不会出来的,我们看到分页里边有一个参数是elem,这里边放置的是dom元素,所以我们需要创建一个标签

看页面效果:

这个时候页面就有分页了

下来就是后端代码:

控制器接受前端ajax请求的参数,并传递给server层处理


  
  1. /**
  2. * author:咔咔
  3. *
  4. * 专题列表数据
  5. * @return Json
  6. */
  7. public function index()
  8. {
  9. if($this->request->isPost()){
  10. $page_index = $this->request->param('page_index');
  11. $page_size = $this->request->param('page_size');
  12. $subjectList = $this->subjectServer->subjectList($page_index,$page_size);
  13. return json($subjectList);
  14. }
  15. return $this->fetch();
  16. }

在subjectServer层中需要做俩件事,一个就是需要在模型里边获取带分页的数据 ,还有一个就是获取数据总量

然后subject模型查询带分页的数据,跟数据总量,然后将数据返回给server层

这个时候又会来到subjectServer层处理数据

在server层我们继承了BaserServer

BaseServer层会处理分页数据,并返回最终数据给控制器

控制器接收到最终数据,以json的形式返回给前端

返回数据:

文章来源: blog.csdn.net,作者:咔咔-,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/fangkang7/article/details/85092237

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。