loadforum();

 

loadforum();
第53行左右的这句代码,我们需要细究一下!

loadforum()函数的功能很强大,它负责取BBS板块和用户的相关数据!大家可以debug一下,查看一下它的细节!整体结构还算清晰!
当用户未登录,请求中未指定fid和tid的时候,它其实什么都没做,只是简单的给相关数据赋空值而已!如果用户处在登录状态呢,注意下面这段代码:

if($_G['uid']) {
if($_G['member']['accessmasks']) {
$accessadd1 = ', a.allowview, a.allowpost, a.allowreply, a.allowgetattach, a.allowpostattach, a.allowpostimage';
$accessadd2 = "LEFT JOIN ".DB::table('forum_access')." a ON a.uid='$_G[uid]' AND a.fid=f.fid";
}

if($adminid == 3) {
$modadd1 = ', m.uid AS ismoderator';
$modadd2 = "LEFT JOIN ".DB::table('forum_moderator')." m ON m.uid='$_G[uid]' AND m.fid=f.fid";
}
}


看得出来,如果有uid,那么就在取该论坛数据的时候加上left join语句,同时取出匹配条件(a.uid='$_G[uid]' AND a.fid=f.fidm.uid='$_G[uid]' AND m.fid=f.fid)的用户配置!对照着数据字典,可以看出查出来的这些字段都是用来控制对指定BBS板块的操作权限的,例如是否有权限浏览,发表,回复,下载或上传附件等操作!

如果请求的是某一个板块,那么执行的就是这条语句:
$forum = DB::fetch_first("SELECT f.fid, f.*, ff.* $accessadd1 $modadd1, f.fid AS fid
FROM ".DB::table('forum_forum')." f
LEFT JOIN ".DB::table("forum_forumfield")." ff ON ff.fid=f.fid $accessadd2 $modadd2
WHERE f.fid='$fid'");


很给力吧,取出指定板块的所有配置数据,对比数据字典中的对应表,可以发现DX允许为每个板块提供相当细腻的定制!

如果请求的是某一个主题贴,那么要做的事儿就更复杂了:

loadcache('threadtableids');

如果请求的是主题帖,那么DX首先就要确定这个贴的数据存在哪个表中,因为DX对帖子的存放方式用到了分表,而上面一行代码就是为了取得所有分表的编号,接下来的几十行都是根据tid(帖子ID)和threadtable(帖子所在的表)来查找,注意的是这里只是取出了帖子的tid和closed字段,closed字段的作用是判断该主题帖是否关闭状态,当然除了帖子的这两个数据,还取了用户和主题所在版块的配置数据,这点和上面讲到的加载版块的方法一样!

现在$forum中就存放着项目所需要的数据,这里loadforum()函数会通过$forum['status']的状态来进行不同的处理,这个status字段在数据字典中提示的作用是:显示状态(0:隐藏,1:正常,2只显示子版块,3:群组)!

如果是该版块的类型是群组,那么首先就是取出这个群组里的成员列表:
if(!empty($forum['moderators'])) {
$forum['moderators'] = unserialize($forum['moderators']);
} else {
require_once libfile('function/group');
$forum['moderators'] = update_groupmoderators($fid);
}


有兴趣的朋友可以仔细分析一下update_groupmoderators()函数,它其实做了很多工作!包括查询和更新数据库!

接下来loadforum()做的就是判断目前的请求用户是否具有该群组的管理权限!然后如果是群组类型的版块,它还会取这个群组的等级(根据该群组的公共积分所在的群组等级积分范围):$forum['level']
确定群组的等级后,还要做的就是取出管理员定义的这个等级的相关数据,例如:等级徽章等相关配置数据!

最后还要为$_G['isgroupuser']初始化一个正确的值(1 or 0),它用来表述该请求用户是否是群组成员。

到此为止

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值