Phpwind的扩展主题主要有三类,分类信息、团购和活动。
他们在论坛前台主要涉及到的类分别是
lib\forum\postcate.class.php 分类信息
lib\forum\posttopic.class.php 团购
lib\forum\activityforbbs.class.php 活动
当用户发帖或者编辑帖子的时候,在post.php里面会根据参数来判断是否为特殊贴,使用了哪种类型的扩展主题,再根据扩展贴的类型在发帖页面加载相应的模板。下面截取其中的一部分代码进行讲解。
if ($action == 'new') {
$theSpecialFlag = false;//是否是特殊帖子(分类、团购、活动)
if ($modelid > 0) {/*主题分类*/
//加载主题分类使用到的类
L::loadClass('posttopic', 'forum', false);
//实例化
$postTopic
= new postTopic($pwpost);
//判断用户是否有权限发这个类型的帖子
if (!$_G['allowmodelid']) {
Showmsg('post_allowpost');
}
//判断这个版块能能否发这个类型的贴子
if (strpos(",".$pwforum->foruminfo['modelid'].",",",".$modelid.",") === false) {
Showmsg('forum_model_undefined');
}
//判断这个主题分类是否已经开启允许发送了
if (!$postTopic->topiccatedb[$postTopic->topicmodeldb[$modelid]['cateid']]['ifable']) {
Showmsg('topic_cate_unable');
}
!$postTopic->topicmodeldb[$modelid]['ifable'] && Showmsg('topic_model_unable');
$special = $pcid
= $actmid
= 0;
//如果上面的判断都没问题 ,那么设置这个帖子为特殊贴
$theSpecialFlag
= true;
} elseif ($pcid
> 0) {/*团购*/
...
} elseif ($actmid
> 0) {/*活动分类*/
...
} elseif (!($pwforum->foruminfo['allowtype'] & pow(2,$special))) {
...
}
}
在帖子详情页read.php 会判断帖子是否为扩展贴,进行特殊处理
下面这段就是根据不同的扩展类型加载不同的方法
if ($read['modelid'] || $foruminfo['modelid']) {
L::loadClass('posttopic', 'forum', false);
$postTopic = new postTopic($read);
}
if ($read['special'] > 20 || $foruminfo['pcid']) {
L::loadClass('postcate', 'forum', false);
$postCate = new postCate($read);
}
if ($read['special'] == 8 || $foruminfo['actmids']) {
L::loadClass('ActivityForBbs', 'activity', false);
$postActForBbs = new PW_ActivityForBbs($data);
}
下面的方法就是获取前台展示的html用的
//获取前台展示的html
$topicvalue = $postTopic->getTopicvalue($read['modelid']);
模板页面直接做如下的输出就好了
if($read['lou'] == 0 && $topicvalue
&& (!$read['ifshield'] || $groupid==3) &&!($read['groupid'] == 6 && $db_shield
)){print<<<EOT
-->
<div
class="c"></div>$topicvalue
<!--
EOT;
}
lib\forum\postcate.class.php、lib\forum\posttopic.class.php和lib\forum\activityforbbs.class.php 三个类里面的代码结构都差不多,只是所针对的类型不一样。由于里面方法比较多,不好一一在这里解释,但是方法里面都有相关的注释了。这些类使用很简单,类似下面这样用就可以了。
L::loadClass('posttopic', 'forum', false);
//实例化
$postTopic
= new postTopic($pwpost);
$postTopic->topicmodeldb[$modelid]['ifable']