实现Discuz!X单版论坛的大体思路
很多人对Discuz!X的单版论坛实现方法比较感兴趣,这里经过自己的尝试总结一些方法给大家。以文理人的Discuz!X2程序为例,目前比较流行的方式是直接在forum.php中查找以下代码:
define('APPTYPEID', 2);
define('CURSCRIPT', 'forum');然后在其后加入以下代码:
$_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..."函数:<!--{if $_G == 200}-->
fid=200的版块才会显示的模板
<!--{else}-->
其他版块显示的模板
<!--{/if}-->这样,就可以实现fid=200的版块与其他版块模块和样式独立。
这样,想显示的显示,不想显示的就可以不显示。是不是很方便?
占楼更新 本帖最后由 cnteacher 于 2012-3-13 09:47 编辑
其实只需要使用php中的"if...else..."函数:
<!--{if $_G == 200}-->
fid=200的版块才会显示的模板
<!--{else}-->
其他版块显示的模板
<!--{/if}-->
这里能具体点吗?最好能结合你修改的文件,作详细修改说明,基础有限。呵呵。谢谢老弟了。 cnteacher 发表于 2012-3-13 09:38 static/image/common/back.gif
其实只需要使用php中的"if...else..."函数:
fid=200的版块才会显示的模板 ...
那我举个例子吧...
比如我们以面包屑导航为例,熟悉Dizcuz!的都知道discuz.htm(论坛首页)和forumdisplay.htm(版块)两个模板文件的面包屑导航是不一样的。但是既然我们要做单版论坛,肯定是希望我们的这个版块可以显示论坛首页那样的面包屑导航(贴数统计、公告神马的)。但是我们知道,forumdisplay.htm这个文件是所有版块共用的,它会根据调用它的当前版块来匹配版块的设置,而且我们也不想让所有的版块都变得跟论坛首页面包屑导航一样,所以这里就可以用到这个if...else...判断语句了,判断当fid=200的时候,改变版块的面包屑导航样式,其他的版块则可以保留原有的样式。
大致方法如下:
(1)使用记事本或者编辑工具分别打开discuz.htm和forumdisplay.htm,找到它们各自对应的面包屑导航代码;
discuz.htm中:
<div id="pt" class="bm cl">
<!--{if empty($gid) && $announcements}-->
<div class="y">
<div id="an">
<dl class="cl">
<dt class="z xw1">{lang announcements}: </dt>
<dd>
<div id="anc"><ul id="ancl">$announcements</ul></div>
</dd>
</dl>
</div>
<script type="text/javascript">announcement();</script>
</div>
<!--{/if}-->
<div class="z">
<a href="./" class="nvhm" title="{lang homepage}">$_G</a><em>»</em><a href="forum.php">{$_G}</a>$navigation
</div>
<div class="z"><!--{hook/index_status_extra}--></div>
</div>
forumdisplay.htm中:
<div id="pt" class="bm cl">
<div class="z">
<a href="./" class="nvhm" title="{lang homepage}">$_G</a> $navigation
</div>
</div>
(2)我们可以在forumdisplay.htm中面包屑导航div的前面加入:<!--{if $_G == 200}-->
<div id="pt" class="bm cl">
/*要加入的discuz.htm的面包屑*/
</div>
<!--{else}-->
(3)再在forumdisplay.htm中面包屑导航div的后面加入:
<div id="pt" class="bm cl">
/*forumdisplay.htm自己的面包屑*/
</div>
<!--{/if}-->
这样,实际上就已经完成了if...else...的操作了。
但是,需要注意的是,把discuz.htm里的div移植到forumdisplay.htm中,变量的调用可能会读取不成功,有函数调用功底的站长可以重新写代码在这里调用;面包屑导航的样式也会乱(因为css对它们的控制不同)。所以稍有css功底的请自行重定义修改后个标签的css样式即可。
本人新手,不太懂数据库的操作,所以小站采用的是规避的方式,即直接在单版去掉面包屑导航的显示。
去掉的方法其实也很简单,将和之间的代码全部删除即可,意思也不难理解。
至于论坛数据统计,完全可以自己添加DIY调用的嘛。(如文理人BBS现在的方式)
暂时写这么多,希望您能看懂。如果有别的问题,欢迎在本帖继续交流。谢谢~
(3)再在forumdisplay.htm中面包屑导航div的后面加入:
....
这里是不是有问题?我按照你说的加了后。tt.php不能访问了
后面加上这个。对吧?
<!--{else}-->
<!--{/if}--> cnteacher 发表于 2012-3-13 10:33 static/image/common/back.gif
后面加上这个。对吧?
参考代码:<!--{if $_G == 200}-->
<div id="pt" class="bm cl">
/*要加入的discuz.htm的面包屑*/
</div>
<!--{else}-->
<div id="pt" class="bm cl">
/*forumdisplay.htm自己的面包屑*/
</div>
<!--{/if}-->没事,慢慢来。
如果新手,建议本地搭环境调试好再应用在您的站点上~
怎么规避版块名字 今日:主题: 以及版块介绍 这一部分啊? cnteacher 发表于 2012-3-13 11:04 static/image/common/back.gif
怎么规避版块名字 今日:主题: 以及版块介绍 这一部分啊?
原理是一样的
你再研究研究
找到对应模板div,if和else之间留空,else和/if之间保留就可以了
参考代码:
<!--{if $_G == 200}-->
/*不想显示,留空*/
<!--{else}-->
<div class="bm bml pbn">
/*forumdisplay.htm保留的版块简介代码*/
</div>
<!--{/if}-->
眼镜蛇 发表于 2012-3-13 11:45 static/image/common/back.gif
原理是一样的
你再研究研究
嗯,我自己研究出来了。谢谢你。。。还有个问题,你的tt.php右侧的调用,怎么实现的?貌似默认的没有DIY区域。是自己添加的新的DIY区域吗?
页:
[1]
2