找回密码
 立即注册
搜索

途迹耕耘

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

GMT+8, 2025-12-22 04:12 , Processed in 0.162258 second(s), 14 queries .

[DZ教程] discuz 调用帖子列表带分页+多图显示(之二)

[复制链接]
bdk 发表于 2020-5-2 12:37:55 | 显示全部楼层 |阅读模式
之前写了一个discuz 门户首页调用帖子列表带分页+多图显示(之一)
再说一遍其实并不是说一定要门户首页,其他页面也可以用。

下面以自定义可diy页面来演示“调用帖子列表带分页+多图显示”另一种方法。

新建三个文件,根目录下test.php入口文件、模板目录portal目录里test.htm模板文件和thread_list.php数据查询文件。惯例无css样式。

展开一步步说:

1.新建test.php文件,放到根目录,代码如下:
  1. <?php
  2. define('CURSCRIPT', 'portal');//定义常量,用于body标签的id选择器名称,与本身文件名相同(不带后缀),可在导航栏实现当前高亮。
  3. define('CURMODULE', 'test');//定义常量,用于body标签的class(类)选择器名称,门户首页为该命名,可以更换,可选
  4. require './source/class/class_core.php';//引入系统核心文件
  5. $discuz = & discuz_core::instance();//以下代码为创建及初始化对象
  6. $discuz->cachelist = $cachelist;
  7. $discuz->init();
  8. loadcache('diytemplatename');
  9. $navtitle = '这里定义单页的标题';//可选
  10. $metakeywords = '这里定义单页的关键词';//可选
  11. $metadescription ='这里定义单页的描述内容';//可选
  12. include template('diy:portal/test');
  13. ?>
复制代码
2.新建test.htm文件,放到模板目录portal文件夹里,代码如下:
  1. <!--{template common/header}-->
  2. <!--{eval require_once("template/模板目录/portal/thread_list.php");}-->
  3. <ul>
  4. <li{if $_GET['order']=='dateline' || $_GET['order']==''} class="a"{/if}><a href="test.php?order=dateline">时间<span></span></a></li>
  5. <li{if $_GET['order']=='replies'} class="a"{/if}><a href="test.php?order=replies">回复<span></span></a></li>
  6. <li{if $_GET['order']=='views'} class="a"{/if}><a href="test.php?order=views">查看<span></span></a></li>
  7. <li{if $_GET['order']=='digest'} class="a"{/if}><a href="test.php?order=digest">精华<span></span></a></li>
  8. </ul>
  9. <div class="thread minh" style="position: relative;">
  10.         <!--{eval $list_count=0;}-->
  11.         <!--{loop $manylist $thread}-->
  12.         <!--{eval $list_count+=1;}-->
  13.         <div class="threadlist">
  14.                 <div class="threadlist_stat threadlist_stat_hot">
  15.                         <a href="forum.php?mod=viewthread&tid=$thread[tid]" title="$thread[views] 个查看">$thread[views]</a>
  16.                 </div>
  17.                 <div class="threadlist_title"
  18.                 <div class="right">
  19.                 <a href="forum.php?mod=viewthread&tid=$thread[tid]" onclick="atarget(this)" title="$thread[subject]">$thread[subject]</a>
  20.                 <!--{if $thread['attachment'] == 2}--><img src="static/image/filetype/image_s.gif" alt="attach_img" title="图片附件" align="absmiddle"/><!--{/if}-->
  21.         </div>
  22.         <div class="threadlist_message"><!--{echo cutstr($thread['message'],300)}--></div>
  23.         <!--{if $thread['attachment'] == 2}-->
  24.         <!--{eval $table='forum_attachment_'.substr($thread['tid'], -1);}-->
  25.         <!--{eval $query = DB::fetch_all("SELECT aid,tid,description,filename FROM ".DB::table($table)." WHERE tid='$thread[tid]' AND isimage!=0 ORDER BY `dateline` DESC LIMIT 0,12"); }-->
  26.         <!--{eval $thread['pics']=count($query);}-->
  27.         <div class="threadlist_imglist{if $_G['cookie']['threadthumbhide']} dn{/if}">
  28.                 <!--{eval $i=1}-->
  29.                 <!--{loop $query $pic}-->
  30.                 <!--{if $i<6}-->
  31.                 <div><a href="forum.php?mod=viewthread&tid=$thread[tid]#aimg_$pic[aid]"><img src="{eval echo(getforumimg($pic[aid],0,120,80))}" alt="{if $pic[description]}$pic[description]{else}$pic[filename]{/if}" title="{if $pic[description]}$pic[description]{else}$pic[filename]{/if}"/></a></div>
  32.                 <!--{/if}-->
  33.                 <!--{eval $i++}-->
  34.                 <!--{/loop}-->
  35.         </div>
  36.         <!--{/if}-->
  37.         <div class="threadlist_info">
  38.                 <div class="lastreply">
  39.                         <a href="forum.php?mod=redirect&tid=$thread[tid]&goto=lastpost#lastpost">$thread[lastposter] @ <span title="">{echo date('Y-m-d', $thread['dateline']);}</span></a>
  40.                 </div>
  41.                 <a href="home.php?mod=space&uid=$thread[authorid]">$thread[author]</a> @ {echo date('Y-m-d', $thread['dateline']);}
  42.                 <span class="pipe">|</span><span  class="greencolor"><a href="forum.php?mod=forumdisplay&fid=$thread[fid]"><strong>$thread[name]</strong></a></span>
  43.         </div>
  44. </div>
  45. <!--{/loop}-->
  46. </div>
  47. <!--{if $allnum>$num}--><div class="nextpage"><a href="javasctipt:;">下一页</a></div><!--{/if}-->
  48. </div>
  49. $pagenav
  50. <!--{template common/footer}-->
复制代码
以上代码里注意改文字“模板目录”为自己的模板目录名。

3.新建thread_list.php文件,放到模板目录里portal文件夹内,代码如下:
  1. <?php

  2. if(!defined('IN_DISCUZ')) {
  3.         exit('Access Denied');
  4. }

  5. $fids='2';//调用的版块,多个用英文逗号分开

  6. if($_GET['order']=='dateline' || $_GET['order']=='views' || $_GET['order']=='replies' || $_GET['order']=='digest'){
  7.         $order= $_GET['order'];
  8. }else{
  9.         $order= 'dateline';
  10. }

  11. $messagelength='500';//内容字数

  12. $num=10;//每页显示条数
  13. $begin=($_G['page']-1)*$num;
  14. $manylist=array();
  15. require_once libfile('function/post');
  16. $rs=DB::query("SELECT t.*,p.message,p.pid,f.name FROM ".DB::table("forum_thread")." t LEFT JOIN ".DB::table("forum_post")." p on p.tid=t.tid LEFT JOIN ".DB::table("forum_forum")." f on f.fid=t.fid WHERE t.`fid` in ($fids) and t.displayorder>=0 and p.first=1 group by t.tid ORDER BY t.`$order` DESC LIMIT $begin , $num");
  17. while ($rw=DB::fetch($rs)) {
  18.         $rw['message']=messagecutstr($rw['message'],$messagelength,'');
  19.         $rw['message']=dhtmlspecialchars($rw['message']);
  20.         $manylist[]=$rw;
  21. }
  22. $allnum=DB::result_first("select count(*) from ".DB::table("forum_thread")." where fid in ($fids)");
  23. $pagenav=multi($allnum,$num,$_G['page'],"test.php?order=$order#threadsbody");

  24. ?>
复制代码
————制作完成——————
附个说明:以上代码中,
  1. $fids='2';//调用的版块,多个用英文逗号分开
复制代码
在下面的使用中,对应两处条件where fid in ($fids),即fid等于$fids所包含的版块,如果版块较多,那么可以用排除的方法
  1. where fid in ($fids)
复制代码
改为
  1. where fid NOT in ($fids)
复制代码
即不包含。
20170312 问题补充
调用的帖子没有判断阅读权限问题,这里加上
1.在thread_list.php里?>结束之前加上
  1. //当前登陆用户所在组权限
  2. $ugp_id = DB::result(DB::query("SELECT groupid FROM ".DB::table('common_member')." WHERE `uid`= '$_G[uid]'"));
  3. $ugp_read = DB::result(DB::query("SELECT readaccess FROM ".DB::table('common_usergroup_field')." WHERE `groupid`= '$ugp_id'"));
复制代码
2.在帖子列表调用message外做判断,如果当前登陆用户的用户组权限大于帖子设定阅读权限,显示摘要,否则显示权限不足提示。
  1. <!--{if $ugp_read < $thread['readperm']}-->您的权限($ugp_read),本帖需要权限{$thread['readperm']}才可浏览。<!--{else}--><!--{echo cutstr($thread['message'],300)}--><!--{/if}-->
复制代码