找回密码
 立即注册
搜索

途迹耕耘

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

GMT+8, 2025-12-22 05:42 , Processed in 0.110405 second(s), 14 queries .

[DZ教程] discuz 3.2 首页ajax点击加载更多(最简版)

[复制链接]
bdk 发表于 2020-5-2 11:52:47 | 显示全部楼层 |阅读模式
非diy,查询数据库获得数据,带分页,带加载更多按钮。
以文章列表为例:
数据查询部分
  1. //首页文章主列表
  2. $aids='56,63,68';//不调用的栏目,多个用半角逗号分开
  3. $article_messagelength='500';//内容字数
  4. $article_num=2;
  5. $article_begin=($_G['page']-1)*$article_num;
  6. $article_manylist=array();
  7. require_once libfile('function/post');
  8. $article_rs=DB::query("SELECT a.*,a.title as atitle,b.*,c.* FROM ".DB::table("portal_article_title")." a LEFT JOIN ".DB::table("portal_article_content")." b on b.aid=a.aid LEFT JOIN ".DB::table("portal_article_count")." c on c.aid=a.aid WHERE a.`aid` NOT in ($aids) and a.status=0 group by a.aid ORDER BY b.`dateline` DESC LIMIT $article_begin , $article_num");
  9. while ($article_rw=DB::fetch($article_rs)) {
  10.         $article_rw['content']=messagecutstr($article_rw['content'],$article_messagelength,'');
  11.         $article_rw['content']=dhtmlspecialchars($article_rw['content']);
  12.         $article_manylist[]=$article_rw;
  13. }
  14. $article_allnum=DB::result_first("select count(*) from ".DB::table("portal_article_title")." where aid NOT in ($aids) and `status`=0");
  15. $article_pagenav=multi($article_allnum,$article_num,$_G['page'],"portal.php");
  16. $article_ntpage=$_G['page']+1;
  17. $article_fynum=ceil($article_allnum/$article_num);
复制代码
模板调用部分
  1. <ul class="article-list tab-list active" id="article-list">
  2. <!--{loop $article_manylist $value}-->
  3. <li id="list_{$value['aid']}" class="item">
  4. <div class="item-img">
  5. <a href="portal.php?mod=view&aid={$value['aid']}" title="{$value['atitle']}" target="_blank">
  6. <img src="data/attachment/{$value['pic']}" width="480" height="320" alt="{$value['atitle']}">
  7. </a>
  8. <a class="item-category" href="forum.php?mod=forumdisplay&fid={$value['aid']}" target="_blank">{$value['name']}</a>
  9. </div>
  10. <div class="item-content">
  11. <h2 class="item-title"><a href="portal.php?mod=view&aid={$value['aid']}" title="{$value['atitle']}" target="_blank">{$value['atitle']}</a></h2>
  12. <div class="item-excerpt">
  13. <p>{$value['content']}</p>
  14. </div>
  15. <div class="item-meta">
  16. <div class="item-meta-li author">
  17. <a data-user="4" target="_blank" href="#" class="avatar">
  18. <img src="uc_server/avatar.php?uid={$value['uid']}&size=small" width="30" height="30" alt="{$value['username']}"/>
  19. </a>
  20. <a class="nickname" href="#" target="_blank">{$value['username']}</a>
  21. </div>
  22. <span class="item-meta-li date">10分钟前</span>
  23. <span class="item-meta-li views" title="阅读"><i class="fa fa-eye"></i> <span class="data">{$value['viewnum']}</span></span>
  24. <span class="item-meta-li likes" title="分享"><i class="fa fa-thumbs-up"></i> <span class="data">{$value['sharetimes']}</span></span>
  25. <a class="item-meta-li comments" href="#" target="_blank" title="评论"><i class="fa fa-comment"></i><span class="data">{$value['commentnum']}</span></a>
  26. <span class="item-meta-li hearts" title="收藏"><i class="fa fa-heart"></i><span class="data">{$value['favtimes']}</span></span>
  27. </div>
  28. </div>
  29. </li>
  30. <!--{/loop}-->
  31. </ul>
  32. <div class="load-more-wrap">
  33. <a class="load-more" href="javascript:;" rel="portal.php?&page={$article_ntpage}" curpage="{$_G['page']}" id="autopbn" totalpage="{$article_fynum}" picstyle="$_G[forum][picstyle]" forumdefstyle="$_G[cookie][forumdefstyle]">加载更多+</a>
  34. <script type="text/javascript" src="{$_G[style][styleimgdir]}/js/indexloadpage.js?{VERHASH}"></script>
  35. </div>
  36. <div class="mt cl">
  37. <div id="fd_page_bottom">{$article_pagenav}</div>
  38. </div>
复制代码
indexloadpage.js部分
  1. /*
  2.         [Discuz!] ajaxlist
  3. */

  4. (function() {

  5.         var autopbn = $('autopbn');
  6.         var nextpageurl = autopbn.getAttribute('rel').valueOf();
  7.         var curpage = parseInt(autopbn.getAttribute('curpage').valueOf());
  8.         var totalpage = parseInt(autopbn.getAttribute('totalpage').valueOf());
  9.         var picstyle = parseInt(autopbn.getAttribute('picstyle').valueOf());
  10.         var forumdefstyle = parseInt(autopbn.getAttribute('forumdefstyle').valueOf());
  11.         picstyle = picstyle && !forumdefstyle;
  12.         var autopagenum = 0;
  13.         var maxpage = (curpage + autopagenum) > totalpage ? totalpage : (curpage + autopagenum);

  14.         var loadstatus = 0;

  15.         autopbn.onclick = function() {
  16.                 var oldloadstatus = loadstatus;
  17.                 loadstatus = 2;
  18.                 autopbn.innerHTML = '正在加载, 请稍后...';
  19.                 getnextpagecontent();
  20.                 loadstatus = oldloadstatus;
  21.         };

  22.         if(autopagenum > 0) {
  23.                 window.onscroll = function () {
  24.                         var curtop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
  25.                         if(curtop + document.documentElement.clientHeight + 500 >= document.documentElement.scrollHeight && !loadstatus) {
  26.                                 loadstatus = 1;
  27.                                 autopbn.innerHTML = '正在加载, 请稍后...';
  28.                                 setTimeout(getnextpagecontent, 1000);
  29.                         }
  30.                 };
  31.         }

  32.         function getnextpagecontent() {

  33.                 if(curpage + 1 > totalpage) {
  34.                         window.onscroll = null;
  35.                         autopbn.style.display = 'none';
  36.                         return;
  37.                 }
  38.                 if(loadstatus != 2 && curpage + 1 > maxpage) {
  39.                         autopbn.innerHTML = '下一页 &#65533;0&#65533;3';
  40.                         if(curpage + 1 > maxpage) {
  41.                                 window.onscroll = null;
  42.                         }
  43.                         return;
  44.                 }
  45.                 curpage++;
  46.                 var url = nextpageurl + '&t=' + parseInt((+new Date()/1000)/(Math.random()*1000));
  47.                 var x = new Ajax('HTML');
  48.                 x.get(url, function (s) {
  49.                         s = s.replace(/\n|\r/g, '');
  50.                         if(s.indexOf("id="autopbn"") == -1) {
  51.                                 $("autopbn").style.display = "none";
  52.                                 window.onscroll = null;
  53.                         }

  54.                         if(!picstyle) {
  55.                                 var tableobj = $('article-list');
  56.                                 var nexts = s.match(/\<li id="list_(\d+)" class="item"\>(.+?)\<\/li>/g);
  57.                                 for(i in nexts) {
  58.                                         if(i == 'index' || i == 'lastIndex') {
  59.                                                 continue;
  60.                                         }
  61.                                         var insertid = nexts[i].match(/<li id="list_(\d+)" class="item"\>/);
  62.                                         if(!$('list_' + insertid[1])) {

  63.                                                 var newbody = document.createElement('li');
  64.                                                 tableobj.appendChild(newbody);
  65.                                                 var div = document.createElement('ul');
  66.                                                 div.innerHTML = '<ul>' + nexts[i] + '</ul>';
  67.                                                 tableobj.replaceChild(div.childNodes[0].childNodes[0], tableobj.lastChild);
  68.                                         }
  69.                                 }
  70.                         } else {
  71.                                 var nexts = s.match(/\<li style="width:\d+px;" id="picstylethread_(\d+)"\>(.+?)\<\/li\>/g);
  72.                                 for(i in nexts) {
  73.                                         var insertid = nexts[i].match(/id="picstylethread_(\d+)"\>/);
  74.                                         if(!$('picstylethread_' + insertid[1])) {
  75.                                                 $('threadlist_picstyle').innerHTML += nexts[i];
  76.                                         }
  77.                                 }
  78.                         }
  79.                         var pageinfo = s.match(/\<div id="fd_page_bottom"\>(.+?)\<\/div\>/);
  80.                         nextpageurl = nextpageurl.replace(/&page=\d+/, '&page=' + (curpage + 1));

  81.                         $('fd_page_bottom').innerHTML = pageinfo[1];
  82.                         if(curpage + 1 > totalpage) {
  83.                                 autopbn.style.display = 'none';
  84.                         } else {
  85.                                 autopbn.innerHTML = '下一页 &#65533;0&#65533;3';
  86.                         }
  87.                         loadstatus = 0;
  88.                 });
  89.         }

  90. })();
复制代码
说明:
数据查询说明
$article_num——每页数量;
$article_manylist——数组;
$article_allnum——文章总数;
$article_pagenav——分页代码,含html;
$article_ntpage——下一页页码;
$article_fynum——总页数。

模板调用说明
1.列表外层容器id=article-list,要与js里一致;
2.列表本身容器id="list_xx"前缀要与js里一致;
3.加载按钮(id="autopbn"行)要放到id=article-list容器之外;
4.分页代码$article_pagenav外容器要有id="fd_page_bottom",标签要与js里一致。

js代码说明
var tableobj = $('article-list');//列表外部容器id
var nexts = s.match(/\<li id="list_(\d+)" class="item"\>(.+?)\<\/li>/g);//列表本身容器,class要写全,且id和class前后顺序必须与网页源代码里显示一致。
var newbody = document.createElement('li');//列表本身容器元素标签。
div.innerHTML = '<ul>' + nexts + '</ul>';列表外部容器元素标签。
var pageinfo = s.match(/\<div id="fd_page_bottom"\>(.+?)\<\/div\>/);//分页代码外部容器id。