利用ajax实现织梦dedecms瀑布流无限加载功能

功能主要用到AJAX技术!
一、首先找到并打开/plus/list.PHP文件,在里面找到如下代码

 
 
  • 1
  • 1
require_once(dirname(__FILE__)."/../include/common.inc.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
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
    • 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
    //列表页瀑布流无限加载代码 if(isset($_GET['ajax'])){ $typeid = 'typeid']) ? intval('typeid']): 0;//传递过来的分类ID $page = 'page']) ? intval('page']): //页码 $pagesize = 'pagesize']) ? intval('pagesize']): 15;//每页多少条,也就是一次加载多少条数据 $start = $page>0 ? ($page-1)*$pagesize : //数据获取的起始位置。即limit条件的第一个参数。 $typesql = $typeid ? " WHERE typeid=$typeid" : '';//这个是用于首页实现瀑布流加载,因为首页加载数据是无需分类的,所以要加以判断,如果无需 $total_sql = "SELECT COUNT(id) as num FROM `#@__archives` $typesql "; $temp = $dsql->Getone($total_sql); $total = //数据总数 $load_num =0; if(is_array($temp)){ $load_num= round(($temp['num']-15)/$pagesize);//要加载的次数,因为认已经加载了 $total = 'num']; } $sql = "SELECT a.*,t.typedir,t.typename,t.isdefault,t.defaultname,t.namerule,t.namerule2,t.ispart,t.moresite,t.siteurl,t.sitepath FROM `#@__archives` as a JOIN `#@__arctype` AS t ON a.typeid=t.id $typesql ORDER BY id DESC LIMIT $start,$pagesize"; $dsql->SetQuery($sql); $dsql->Execute('list'); $statu = //是否有数据,认没有数据 $data = array(); $index = while($row = $dsql->GetArray("list")){ $row['info'] = 'infos'] = cn_substr('description'],160); 'id'] = 'id']; 'filename'] = 'arcurl'] = GetFileUrl('id'],'typeid'],0); Box-sizing: border-Box;">'senddate'],0); Box-sizing: border-Box;">'title'],0); Box-sizing: border-Box;">'ismake'],0); Box-sizing: border-Box;">'arcrank'],0); Box-sizing: border-Box;">'namerule'],0); Box-sizing: border-Box;">'typedir'],0); Box-sizing: border-Box;">'money'],0); Box-sizing: border-Box;">'filename'],0); Box-sizing: border-Box;">'moresite'],0); Box-sizing: border-Box;">'siteurl'],0); Box-sizing: border-Box;">'sitepath']); 'typeurl'] = GetTypeUrl('isdefault'],0); Box-sizing: border-Box;">'defaultname'],0); Box-sizing: border-Box;">'ispart'],0); Box-sizing: border-Box;">'namerule2'],0); Box-sizing: border-Box;">'sitepath']); if('litpic'] == '-' || ''){ 'litpic'] = $GLOBALS['cfg_cmspath'].'/images/defaultpic.gif'; } if(!preg_match("#^http:\/\/#i",0); Box-sizing: border-Box;">'litpic']) &&'cfg_multi_site'] == 'Y'){ 'cfg_mainsite'].'litpic']; } 'picname'] = 'litpic'];//缩略图 //$row['stime'] = GetDateMK($row['pubdate']); 'stime'] = date('Y-m-d H:i',0); Box-sizing: border-Box;">'pubdate']); 'click'] = 'click']; 'typelink'] = "".'typename']."";//分类 'fulltitle'] = 'title'];//完整的标题 'shorttitle'] = 'shorttitle'];//副标题 'title'] = cn_substr(80);//截取后的标题 $data[$index] = $row; $index++; } if(!empty($data)){ 1;//有数据 } $result =array('statu'=>$statu,'list'=>$data,0); Box-sizing: border-Box;">'total'=>$total,0); Box-sizing: border-Box;">'load_num'=>$load_num); echo json_encode($result);//返回数据 exit(); }

    二、然后在需要使用瀑布流无线加载的模板里引用下面这个js代码(这个js大家应该不是很陌生,只要有用到JQ库函数的话一定要引用这个js):

      
      
  • 1
  • <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>

    三、并在底部添加如下代码

      
      
  • 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
    • 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
    type="text/javascript"> var loadConfig = { url_api:'/plus/list.PHP',typeid:{dede:field name="typeid"/},page:2,pagesize://这个就是滑动一次添加几条信息的参数设置 loading : 0,} function loadMoreApply(){ if(loadConfig.loading == 0){ var typeid = loadConfig.typeid; var page = loadConfig.page; var pagesize = loadConfig.pagesize; var url = loadConfig.url_api,data={ajax:'pullload',typeid:typeid,page:page,pagesize:pagesize}; var sTop = document.body.scrollTop || document.documentElement.scrollTop,dHeight = $(document).height(),cHeight = document.documentElement.clientHeight; console.log(dHeight); if (sTop + cHeight >= dHeight - cHeight) { loadConfig.loading = 1; function ajax(url,data) { $.ajax({url: url,data: data,async: false,type: 'GET',dataType: 'json',success: function(data) { addContent(data); }}); } ajax(url,data); } } } function addContent (rs){ if(rs.statu== 1){ var data = rs.list; var total = rs.total; var arr=[]; var length = data.length; for(var i=0;i<length;i++){ arr.push('<li class="badcat-cell mui-media">'); arr.push('<a href="'+data[i].arcurl+'">'); arr.push('<img class="mui-media-object mui-pull-right" src="'+data[i].picname+'<div class="mui-media-body">'); arr.push(''+data[i].title+''); arr.push('<p class="mui-ellipsis">'+data[i].info+'.</p>'); arr.push('</div>'); arr.push('</a>'); arr.push('</li>'); } $('.badcat').append(arr.join('')); loadConfig.load_num = rs.load_num; if(total<loadConfig.page*loadConfig.pagesize || loadConfig.page > loadConfig.load_num){ window.removeEventListener('srcoll',loadMoreApply,false); } loadConfig.page++; loadConfig.loading = 0; } } function pullLoad(){ window.addEventListener('scroll',102); Box-sizing: border-Box;">false); } pullLoad() checkMobile(); script>
    上面的代码中的$('.badcat').append(arr.join(''));里的badcat对应模板内列表的外框class属性。
    arr.push部分对应的是列表中单篇文章代码。
    这样就可以想要使用瀑布流无线加载了。
    如果在其它页调用的话只需把代码中的typeid:{dede:field name="typeid"/} 修改为typeid:5(5 就是我们要调用文章的栏目ID)即可。
    注意:很多人在调试这个功能的时候可能把标签写成了
      
      
  • 1
  • {dede:list pagesize='10'}{/dede:list}

    要用

    arclist row="15"}{/dede:arclist}

    才可以,不然文章是加载不出来的!

    基于有些网友的需求添加了“加载完成”的提示! 找到如下代码

      
      
  • 1
  • 2
    • 1
    • 2
    if(total<loadConfig.page*loadConfig.pagesize || loadConfig.page > loadConfig.load_num){ window.removeEventListener(false);

    在判断语句的最后加上如下代码

      
      
  • 1
  • $('<div style="width:100%; float:left; text-align:center; padding: 10px 0px; color:#fff; background:#00aa98; font-size: 16px;">加载完成</div>').insertAfter('.badcat');

    加上这段代码的意思是:当文章全部加载完的时候在所有文章底部显示“加载完成”的提示代码的意思是:在类为“.badcat”的标签下面插入 “加载完成”的DIV标签

    文章GIF动态图http://www.23o.cn)编辑整理

    相关文章

    IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
    PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
    使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
    Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
    本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
    Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...