找回密码
 立即注册
搜索

途迹耕耘

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

GMT+8, 2025-12-22 07:10 , Processed in 0.107609 second(s), 14 queries .

[DZ教程] discuz x3.2 分区页面调用本分区下帖子并分页

[复制链接]
admin 发表于 2020-5-1 22:33:50 | 显示全部楼层 |阅读模式
刚刚@何日君再来 说想要这个,其实我也觉得分区页面太单调,一直在改其他东西,还没顾得上,既然有人需要,就先写出来了。
做法和之前的的带分页系列相似,只是在数据查询时改了些获取条件、表间关联条件。

先做个查询数据的php文件,暂且命名为gid.php吧,放到风格目录/forum里。代码如下:
  1. <?php

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

  5. $gids = $_GET['gid'];//调用分区,get获取。

  6. $messagelength='500';//内容提取字节数

  7. $num=10;
  8. $begin=($_G['page']-1)*$num;
  9. $glist=array();
  10. require_once libfile('function/post');
  11. $rs=DB::query("
  12. SELECT t.*,p.message,p.pid,f.* 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 f.`fup` = '$gids' and t.displayorder>=0 and p.first=1 group by t.tid ORDER BY t.`dateline` DESC LIMIT $begin , $num");
  13. while ($rw=DB::fetch($rs)) {
  14.         $rw['message']=messagecutstr($rw['message'],$messagelength,'');
  15.         $rw['message']=dhtmlspecialchars($rw['message']);
  16.         $glist[]=$rw;
  17. }
  18. if($gids){
  19. $gallnum=DB::result_first("select count(*) 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 f.fup='$gid' and p.first=1");;
  20. $pagenav=multi($gallnum,$num,$_G['page'],"forum.php?gid=$gids");
  21. }
  22. ?>
复制代码
然后打开风格目录/forum/discuz.htm,在<!--{template common/footer}-->之前加入如下代码:
  1. <!--{eval require_once("template/风格目录/forum/gid.php");}-->
  2. <style>
  3. .gthread{width:1000px;background:#fff;padding:20px;margin:15px auto;}
  4. .gthread ul li{}
  5. </style>
  6. <!--{if $_GET['gid']}-->
  7. <div class="gthread">
  8. <ul>
  9. <!--{loop $glist $gv}-->
  10. <li><a href="forum.php?mod=viewthread&tid={$gv[tid]}"><b>{$gv[name]}</b>{$gv[subject]}</a><span class="pipe">|</span>by {$gv[author]}<span class="pipe">|</span>@{echo dgmdate({$gv[dateline]}, 'u', '9999', getglobal('setting/dateformat'))}<span class="pipe">|</span>查看:{$gv[views]}<span class="pipe">|</span>回复:{$gv[replies]}</li>
  11. <!--{/loop}-->
  12. </li>
  13. </div>
  14. <!--{/if}-->
  15. <!--{if $allnum>$num}-->
  16. <div class="nextpage">
  17.         <a href="javasctipt:;">下一页</a>
  18. </div>
  19. <!--{/if}-->
  20. $pagenav
复制代码
访问分区地址不变,分页url为forum.php?gid=分区ID&page=页码。

简单补充说明:
因为discuz.htm是分区和论坛首页公用模板,所以,上面代码中的<!--{if $_GET['gid']}-->……<!--{/if}-->是让论坛首页不显示这个内容。
<!--{loop $glist $gv}-->……<!--{/loop}-->这之间的内容可以放很多的,包括,
表pre_forum_thread的所有字段,表pre_forum_post的message和pid字段,表pre_forum_forum的所有字段,此处均写为$gv[字段名]即可使用。
具体对照可查阅>> 数据字典

20170420 更正帖子数量错误:
查询数据代码中获取帖子数量及分页代码有错误,已更正。
不可全局引用,会导致个人空间主题列表页空白,可能是变量冲突,单独引用或将此查询放到模板里。

20170421 修复使用$threads导致个人空间主题列表空白的错误:
给分页统计代码外加上判断,已修复。

20180308 修复分区帖子总数错误的问题。