7140查看/18回复/收藏

admin

2017-1-2 13:56:39

1#
刚刚@何日君再来 说想要这个,其实我也觉得分区页面太单调,一直在改其他东西,还没顾得上,既然有人需要,就先写出来了。
做法和之前的的带分页系列相似,只是在数据查询时改了些获取条件、表间关联条件。

先做个查询数据的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 修复分区帖子总数错误的问题。
18 回帖

何日君再来

2017-1-2 14:22:32

2#
太厉害了,我去试一试,修改方法也让新手简单易懂

何日君再来

2017-1-2 14:49:30

3#
好像出问题了,我把代码按照你的说明放上去,然后能调用也能分页,但是我的另一个分区只有两个帖子,也被分页了,每个分区的页数都成一样的

何日君再来

2017-1-2 15:40:28

4#
还有个比较大胆的想法,如果分区下调用的帖子能像列表那样进行管理操作就完美了,比如置顶帖子这些

admin

2017-1-2 20:22:01

5#
何日君再来 发表于 2017-1-2 14:49
好像出问题了,我把代码按照你的说明放上去,然后能调用也能分页,但是我的另一个分区只有两个帖子,也被分 ...
嗯,是会出现这个问题,在查询分页的时候,没有限定版块,$allnum就按帖子最多分区来统计页数了。
这个问题暂时还想出没有解决办法。
或许你也可以琢磨琢磨,如何将$allnum的查询加上当前分区所有版块的条件。

admin

2017-1-2 20:28:32

6#
何日君再来 发表于 2017-1-2 15:40
还有个比较大胆的想法,如果分区下调用的帖子能像列表那样进行管理操作就完美了,比如置顶帖子这些
其实那就没什么必要了,加一堆东西却和帖子列表页重复的功能。
移植input和js,修改变量和增加查询,需要改的太多,我不敢想像。

何日君再来

2017-1-3 09:31:48

7#
admin 发表于 2017-1-2 20:28
其实那就没什么必要了,加一堆东西却和帖子列表页重复的功能。
移植input和js,修改变量和增加查询,需要 ...

这些我就不懂了

lohuo

2017-1-3 18:17:49

8#
<!--{if empty($_G['forum']['picstyle']) || $_G['cookie']['forumdefstyle'] || !$attachment || !$_G[forum_thread][attachment]}-->
<!--{else}-->
<!--{/if}-->

大哥帮我翻译下这个是 判断什么的 意思

admin

2017-1-4 14:47:17

9#
lohuo 发表于 2017-1-3 18:17
大哥帮我翻译下这个是 判断什么的 意思

非图片模式帖子列表
转载请注明出处。

何日君再来

2017-1-5 09:44:02

10#
http://www.cmsbj.cn/question 老大,这个实现得了吗/
12下一页
您需要登录后才可以回帖 登录 | 注册
高级模式