找回密码
 快速注册

QQ登录

只需一步,快速开始

查看: 8095|回复: 10

实现Discuz!X单版论坛的大体思路

[复制链接]
眼镜蛇 发表于 2012-3-12 12:53:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?快速注册

×
很多人对Discuz!X的单版论坛实现方法比较感兴趣,这里经过自己的尝试总结一些方法给大家。
以文理人的Discuz!X2程序为例,目前比较流行的方式是直接在forum.php中查找以下代码:
  1. define('APPTYPEID', 2);
  2. define('CURSCRIPT', 'forum');
复制代码
然后在其后加入以下代码:
  1. $_GET +=array('mod'=>'forumdisplay','fid'=>200);
复制代码
备注:这里的fid值即为版块的ID。

这种方法的原理,就是将默认的论坛首页指向特定的某个版块。
也就是说默认情况下访问forum.php实际访问的是模板文件中的/forum/discuz.htm,而添加这一句代码之后访问forum.php实际访问的是模板文件中的/forum/forumdisplay.htm(fid为设定值的版块)。

Discuz!X2有一个比较好的功能,就是版块关联,即我们可以把许多版块的帖子集中显示到某一个版块。这样,只要我们把上述方法中的fid填成聚合版块的id,就能达到展现全站帖子的效果了。
设置方法:后台---论坛---“相应版块”---扩展设置---关联群组/版块,填写需要被关联的版块或者群组的fid即可。

但是可能有人觉得这样的实现并不完美,因为这样就等于说直接访问了某个版块,而原本论坛首页的一些参数调用比如“发帖统计”、“公告”什么的并不能显示,而且还会多余的显示“版块简介”之类的框框。
而且,本人经过使用上面的这种方法,发现最不爽的是当首页被指向版块之后,手机版(m.wenliren.com)访问论坛的时候也会受影响,这样用着就有些不爽了。但是又不想费太多的时间和精力去研究手机版的模板,所以只好另辟蹊径了。。。

下面就以小站(www.wenliren.com)为例,给大家另一种配置单版论坛的方法:(仅供参考,也欢迎各位站长指正)

1.新建一个版块,得到版块id(假如为200);
2.在网站根目录新建一个tt.php文件,这个文件的作用就是指向聚合帖子的版块,这样即使把tt.php设为网站首页,也不会影响手机版默认的访问界面(可以直接复制forum.php,重命名为tt.php,加上之前说的那句代码即可);
3.对风格目录:template/your/forum/forumdisplay.htm文件做修改,这里主要提供修改思路:

【修改思路】

其实只需要使用php中的"if...else..."函数:
  1. <!--{if $_G[fid] == 200}-->
  2.    fid=200的版块才会显示的模板                           
  3. <!--{else}-->
  4.    其他版块显示的模板
  5. <!--{/if}-->
复制代码
这样,就可以实现fid=200的版块与其他版块模块和样式独立。

这样,想显示的显示,不想显示的就可以不显示。是不是很方便?

 楼主| 眼镜蛇 发表于 2012-3-12 12:57:43 | 显示全部楼层
占楼更新
回复

使用道具 举报

cnteacher 发表于 2012-3-13 09:38:10 | 显示全部楼层
本帖最后由 cnteacher 于 2012-3-13 09:47 编辑

其实只需要使用php中的"if...else..."函数:
<!--{if $_G[fid] == 200}-->
   fid=200的版块才会显示的模板                           
<!--{else}-->
   其他版块显示的模板
<!--{/if}-->

这里能具体点吗?最好能结合你修改的文件,作详细修改说明,基础有限。呵呵。谢谢老弟了。
回复

使用道具 举报

 楼主| 眼镜蛇 发表于 2012-3-13 10:10:56 | 显示全部楼层
cnteacher 发表于 2012-3-13 09:38
其实只需要使用php中的"if...else..."函数:

   fid=200的版块才会显示的模板                          ...

那我举个例子吧...

比如我们以面包屑导航为例,熟悉Dizcuz!的都知道discuz.htm(论坛首页)和forumdisplay.htm(版块)两个模板文件的面包屑导航是不一样的。但是既然我们要做单版论坛,肯定是希望我们的这个版块可以显示论坛首页那样的面包屑导航(贴数统计、公告神马的)。但是我们知道,forumdisplay.htm这个文件是所有版块共用的,它会根据调用它的当前版块来匹配版块的设置,而且我们也不想让所有的版块都变得跟论坛首页面包屑导航一样,所以这里就可以用到这个if...else...判断语句了,判断当fid=200的时候,改变版块的面包屑导航样式,其他的版块则可以保留原有的样式。

大致方法如下:

(1)使用记事本或者编辑工具分别打开discuz.htm和forumdisplay.htm,找到它们各自对应的面包屑导航代码;

discuz.htm中:
  1. <div id="pt" class="bm cl">
  2.         <!--{if empty($gid) && $announcements}-->
  3.         <div class="y">
  4.                 <div id="an">
  5.                         <dl class="cl">
  6.                                 <dt class="z xw1">{lang announcements}: </dt>
  7.                                 <dd>
  8.                                         <div id="anc"><ul id="ancl">$announcements</ul></div>
  9.                                 </dd>
  10.                         </dl>
  11.                 </div>
  12.                 <script type="text/javascript">announcement();</script>
  13.         </div>
  14.         <!--{/if}-->
  15.         <div class="z">
  16.                 <a href="./" class="nvhm" title="{lang homepage}">$_G[setting][bbname]</a><em>&#187;</em><a href="forum.php">{$_G[setting][navs][2][navname]}</a>$navigation
  17.         </div>
  18.         <div class="z"><!--{hook/index_status_extra}--></div>
  19. </div>
复制代码


forumdisplay.htm中:
  1. <div id="pt" class="bm cl">
  2.         <div class="z">
  3.                 <a href="./" class="nvhm" title="{lang homepage}">$_G[setting][bbname]</a> $navigation
  4.         </div>
  5. </div>
复制代码


(2)我们可以在forumdisplay.htm中面包屑导航div的前面加入:
  1. <!--{if $_G[fid] == 200}-->                        
  2. <div id="pt" class="bm cl">
  3.         /*要加入的discuz.htm的面包屑*/
  4. </div>
  5. <!--{else}-->
复制代码

(3)再在forumdisplay.htm中面包屑导航div的后面加入:
  1. <div id="pt" class="bm cl">
  2.         /*forumdisplay.htm自己的面包屑*/
  3. </div>
  4. <!--{/if}-->
复制代码

这样,实际上就已经完成了if...else...的操作了。

但是,需要注意的是,把discuz.htm里的div移植到forumdisplay.htm中,变量的调用可能会读取不成功,有函数调用功底的站长可以重新写代码在这里调用;面包屑导航的样式也会乱(因为css对它们的控制不同)。所以稍有css功底的请自行重定义修改后个标签的css样式即可。

本人新手,不太懂数据库的操作,所以小站采用的是规避的方式,即直接在单版去掉面包屑导航的显示。
去掉的方法其实也很简单,将和之间的代码全部删除即可,意思也不难理解。
至于论坛数据统计,完全可以自己添加DIY调用的嘛。(如文理人BBS现在的方式)

暂时写这么多,希望您能看懂。如果有别的问题,欢迎在本帖继续交流。谢谢~


回复

使用道具 举报

cnteacher 发表于 2012-3-13 10:29:34 | 显示全部楼层
(3)再在forumdisplay.htm中面包屑导航div的后面加入:
....
这里是不是有问题?我按照你说的加了后。tt.php不能访问了
回复

使用道具 举报

cnteacher 发表于 2012-3-13 10:33:36 | 显示全部楼层
后面加上这个。对吧?
<!--{else}-->
<!--{/if}-->
回复

使用道具 举报

 楼主| 眼镜蛇 发表于 2012-3-13 10:55:30 | 显示全部楼层
cnteacher 发表于 2012-3-13 10:33
后面加上这个。对吧?

参考代码:
  1. <!--{if $_G[fid] == 200}-->                        
  2. <div id="pt" class="bm cl">
  3.         /*要加入的discuz.htm的面包屑*/
  4. </div>
  5. <!--{else}-->
  6. <div id="pt" class="bm cl">
  7.         /*forumdisplay.htm自己的面包屑*/
  8. </div>
  9. <!--{/if}-->
复制代码
没事,慢慢来。

如果新手,建议本地搭环境调试好再应用在您的站点上~

回复

使用道具 举报

cnteacher 发表于 2012-3-13 11:04:20 | 显示全部楼层
怎么规避版块名字 今日:  主题:    以及版块介绍 这一部分啊?
回复

使用道具 举报

 楼主| 眼镜蛇 发表于 2012-3-13 11:45:31 | 显示全部楼层
cnteacher 发表于 2012-3-13 11:04
怎么规避版块名字 今日:  主题:    以及版块介绍 这一部分啊?

原理是一样的
你再研究研究


找到对应模板div,if和else之间留空,else和/if之间保留就可以了


参考代码:
  1. <!--{if $_G[fid] == 200}-->                        
  2.         /*不想显示,留空*/
  3. <!--{else}-->
  4. <div class="bm bml pbn">
  5.         /*forumdisplay.htm保留的版块简介代码*/
  6. </div>
  7. <!--{/if}-->
复制代码


回复

使用道具 举报

cnteacher 发表于 2012-3-13 12:23:39 | 显示全部楼层
眼镜蛇 发表于 2012-3-13 11:45
原理是一样的
你再研究研究

嗯,我自己研究出来了。谢谢你。。。还有个问题,你的tt.php右侧的调用,怎么实现的?貌似默认的没有DIY区域。是自己添加的新的DIY区域吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

快速回复 返回顶部 返回列表