本帖最后由 kutulu 于 2008-10-22 14:12 编辑
环境为SS6.0+DISCUZ6.1
问题描述:
现需要在SS的论坛频道内,获取论坛中各个板块的信息,以group为单位,即一个group下面的所有板块放在一个分区内,模板修改目标代码部分为- <div class="blockcategorylist block3col">
- <!--各板块最新列表-->
- <!--{loop $_SBLOCK['forumarr'] $ckey $cat}-->
- <!--{eval $ctime=3800+30*$ckey;}-->
- <!--{block name="bbsthread" parameter="fid/$cat[fid]/order/dateline DESC/limit/0,10/cachetime/$ctime/subjectlen/40/subjectdot/1/cachename/threadlist/tpl/data"}-->
- <div class="blockcategory" style="width: 256px;">
- <h3>
- <a href="#action/forumdisplay/fid/$cat[fid]#" class="more">更多</a>
- <strong><a href="#action/forumdisplay/fid/$cat[fid]#">$cat[name]</a></strong>
- </h3>
- <ul class="msgtitlelist">
- <!--{loop $_SBLOCK['threadlist'] $value}-->
- <li><cite>#date("m-d", $value["dateline"])# </cite><a href="$value[url]">$value[subject]</a></li>
- <!--{/loop}-->
- </ul>
- <!--p class="catecommend"><a href="javascript:;">热点</a></p-->
- </div>
- <!--{/loop}-->
- </div>
复制代码 实现方法一:
这个方法比较笨,去掉外层循环,直接写死了group的名称,然后在group下面对应的fid取得论坛板块信息,缺点就是一旦在SS里面写死了,今后DISCUZ再针对论坛板块调整的话,SS页面也需要跟着调整,维护工作量太大,代码如下:- <div class="blockcategorylist block3col">
- <!--各板块最新列表-->
-
- <!--{eval $ctime=3800+30*$ckey;}-->
- <!--{block name="bbsthread" parameter="fid/4,5,6/order/dateline DESC/limit/0,10/cachetime/$ctime/subjectlen/40/subjectdot/1/cachename/threadlist/tpl/data"}-->
- <div class="blockcategory" style="width: 256px;">
- <h3>
- <a href="http://localhost:8080/Discuz/upload/index.php?gid=3" class="more">板块1</a>
-
- </h3>
- <ul class="msgtitlelist">
- <!--{loop $_SBLOCK['threadlist'] $value}-->
- <li><cite>#date("m-d", $value["dateline"])# </cite><a href="$value[url]">$value[subject]</a></li>
- <!--{/loop}-->
- </ul>
- <!--p class="catecommend"><a href="javascript:;">热点</a></p-->
- </div>
-
- </div>
复制代码 实现方法二:
抛弃ss提供的模板,手写SQL语句,由于MYSQL限制,无法创建嵌套SQL的视图,直接语句的话,无法根据循环变量取得具体group下面板块的文章更新信息,SQL语句如下:- select d.fid ,c.fid as gfid,d.tid,c.name,d.subject,d.author,d.dateline from cdb_forums c,
- (SELECT b.fup,b.fid,a.subject,a.author,a.dateline,a.tid FROM cdb_threads a ,cdb_forums b
- where a.fid=b.fid) d
- where c.fid=d.fup
- order by d.dateline desc
- limit 0,10;
复制代码
哭求各位大大,有更佳解决方案没有,还请不吝赐教 |