【Layui】使用TP5实现分页

举报
原来是咔咔 发表于 2022/03/27 00:42:33 2022/03/27
【摘要】 author:咔咔 wechat:fangkangfk 看了很多分页功能都实现不了,要么就是看不明白,遇到不会的先使用之前方案实现,慢慢的就会有思路,然后成功 案例: 一个注意点就是html放置的位置 这里我将整段代码都复制出来,如何你只想实现功能,只需要将html拼接的数据换成你的,然后请求接口换成自...

author:咔咔

wechat:fangkangfk

看了很多分页功能都实现不了,要么就是看不明白,遇到不会的先使用之前方案实现,慢慢的就会有思路,然后成功

案例:

一个注意点就是html放置的位置

这里我将整段代码都复制出来,如何你只想实现功能,只需要将html拼接的数据换成你的,然后请求接口换成自己的即可


  
  1. <script type="text/javascript">
  2. window.onload= function () {
  3. loadData() //请求数据
  4. getPage() //分页操作
  5. }
  6. var page=1; //设置首页页码
  7. var limit=1; //设置一页显示的条数
  8. var total; //总条数
  9. function loadData(){
  10. $.ajax({
  11. type:"post",
  12. url:"{url(Banner/index)}",//对应controller的URL
  13. async:false,
  14. dataType: 'json',
  15. data:{
  16. "page_index":page,
  17. "page_size":limit,
  18. },
  19. success:function(ret){
  20. total=ret.total;
  21. var data1=ret.data;
  22. var html= '';
  23. for(var i=0;i<data1.length;i++){
  24. html+='<tr>';
  25. html+='<td>'+ data1[i].b_id +'</td>';
  26. html+='<td>'+ data1[i]['banner_type']['vt_name'] +'</td>';
  27. html+='<td>'+ data1[i]['banner_vs_video_name']['vi_title'] +'</td>';
  28. html+='<td>'+ data1[i]['b_thumbnailUrl'] +'</td>';
  29. html+='<td>'+ data1[i]['b_linkUrl'] +'</td>';
  30. html+='<td>'+ data1[i]['b_sort'] +'</td>';
  31. html+='<td>'+ data1[i]['b_showType'] +'</td>';
  32. html+='<td>'+ data1[i]['b_targetType'] +'</td>';
  33. html+='<td>'+ data1[i]['b_title'] +'</td>';
  34. html+='<td>'+ data1[i]['b_slaveTitle'] +'</td>';
  35. html+='<td>'+ data1[i]['b_linkUrlList']+'</td>';
  36. html+='</tr>';
  37. }
  38. $("#tab_list").html(html);
  39. }
  40. });
  41. }
  42. function getPage(){
  43. layui.use('laypage', function(){
  44. var laypage = layui.laypage;
  45. laypage.render({
  46. elem: 'pages'
  47. ,count: 3 //数据总数,从服务端得到
  48. ,limit:1
  49. ,jump: function(obj, first){
  50. page=obj.curr; //改变当前页码
  51. limit=obj.limit;
  52. loadData()
  53. }
  54. });
  55. });
  56. }
  57. </script>

后台数据:

控制器代码:

server层代码

server层基类代码,处理分页


  
  1. <?php
  2. namespace app\data\server;
  3. class BaseServer
  4. {
  5. /**
  6. * 对于分页数据返回处理
  7. *
  8. * $param array $info 需要 处理的数据
  9. * $param int $count 总的数据量
  10. * $param int $page_size 每页显示的条数
  11. * @return array
  12. */
  13. public function setReturnList($info, $count, $page_size)
  14. {
  15. if($page_size == 0){
  16. // 总页数
  17. $page_count = 1;
  18. }else{
  19. if($count % $page_size == 0){
  20. $page_count = $count / $page_size;
  21. }else{
  22. $page_count = (int)($count / $page_size);
  23. }
  24. }
  25. return [
  26. // 角色数据
  27. 'data' => $info,
  28. // 角色总的数据
  29. 'total_count' => $count,
  30. // 共几页
  31. 'page_count' => $page_count
  32. ];
  33. }
  34. }

如果你只想实现功能的话,使用上边的代码十来分钟就实现了,下来我就要开始分析原理了

首先就是前端js代码了,需要做的第一件事就是组装数据

这里是html源码

我们都知道分页做ajax的用户体验很好,所以我们需要组装数据

 这里的代码就不需要解释了,注释写的特别清晰了


  
  1. <script type="text/javascript">
  2. window.onload= function () {
  3. loadData() //请求数据
  4. getPage() //分页操作
  5. }
  6. var page=1; //设置首页页码
  7. var limit=1; //设置一页显示的条数
  8. var total; //总条数
  9. function loadData(){
  10. $.ajax({
  11. type:"post",
  12. url:"{url(Banner/index)}",//对应controller的URL
  13. async:false,
  14. dataType: 'json',
  15. data:{
  16. "page_index":page,
  17. "page_size":limit,
  18. },
  19. success:function(ret){
  20. total=ret.total;
  21. var data1=ret.data;
  22. var html= '';
  23. for(var i=0;i<data1.length;i++){
  24. html+='<tr>';
  25. html+='<td>'+ data1[i].b_id +'</td>';
  26. html+='<td>'+ data1[i]['banner_type']['vt_name'] +'</td>';
  27. html+='<td>'+ data1[i]['banner_vs_video_name']['vi_title'] +'</td>';
  28. html+='<td>'+ data1[i]['b_thumbnailUrl'] +'</td>';
  29. html+='<td>'+ data1[i]['b_linkUrl'] +'</td>';
  30. html+='<td>'+ data1[i]['b_sort'] +'</td>';
  31. html+='<td>'+ data1[i]['b_showType'] +'</td>';
  32. html+='<td>'+ data1[i]['b_targetType'] +'</td>';
  33. html+='<td>'+ data1[i]['b_title'] +'</td>';
  34. html+='<td>'+ data1[i]['b_slaveTitle'] +'</td>';
  35. html+='<td>'+ data1[i]['b_linkUrlList']+'</td>';
  36. html+='</tr>';
  37. }
  38. $("#tab_list").html(html);
  39. }
  40. });
  41. }
  42. function getPage(){
  43. layui.use('laypage', function(){
  44. var laypage = layui.laypage;
  45. laypage.render({
  46. elem: 'pages'
  47. ,count: 3 //数据总数,从服务端得到
  48. ,limit:1
  49. ,jump: function(obj, first){
  50. page=obj.curr; //改变当前页码
  51. limit=obj.limit;
  52. loadData()
  53. }
  54. });
  55. });
  56. }
  57. </script>

这个时候就会有一个问题,我们组装的数据放在那,这个时候就需要将原来的数据全部删除掉,所有的数据都使用拼接的数据

直到这里前端的代码就结束了,下来开始后端代码

我们在js里边可以看出,ajax像后端发起请求的时候带了俩个参数,一个是页数,一个是页面显示数据

控制器代码

在控制器里边需要获取这俩个参数,并且传递给bannerServer层处理数据

 在bannerServer里边需要查询banner列表的数据,数据查询是在模型里边操作的,所以还需要去一趟banner模型那里一趟

在bannerModel 里边获取列表的所有数据,这里边有一个关联预加载,这个是根据你们的业务来写的,如果没有其他业务直接获取全部然后page()->select()即可,model层数据处理完之后返回给bannerServer层

又回到bannerServer层

这一次获取了数据的总数

将数据,总数,每页查询的条数传递给baseServer层处理

到了baseServer

这一层主要是对参数做了个判断,当前端发生异常,后端没有正常接收到参数时,给默认参数

最后所有的数据都会返回给控制器

这也就是ajax请求到的数据

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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