alleyonline

对discuz的代码分析学习----论坛入口文件(转帖)

只是大致分析下执行流程,主要就是取得mod参数的值,根据取值加载控制器,控制器位置在最后一行指定了。

 

1 )定义应用名称,加载两个必要文件

define(\'APPTYPEID\', 2);
define(\'CURSCRIPT\', \'forum\');

require \'./source/class/class_core.php\';//核心类
require \'./source/function/function_forum.php\';//论坛函数库

2 )modarray数组限定了mod取值范围

复制代码
$modarray = array(\'ajax\',\'announcement\',\'attachment\',\'forumdisplay\',
    \'group\',\'image\',\'index\',\'medal\',\'misc\',\'modcp\',\'notice\',\'post\',\'redirect\',
    \'relatekw\',\'relatethread\',\'rss\',\'topicadmin\',\'trade\',\'viewthread\',\'tag\',\'collection\',\'guide\'
);
//模块缓存列表,各个子数组分别表示各个模块要缓存的缓存项
$modcachelist = array(
    \'index\'        => array(\'announcements\', \'onlinelist\', \'forumlinks\',
            \'heats\', \'historyposts\', \'onlinerecord\', \'userstats\', \'diytemplatenameforum\'),
    \'forumdisplay\'    => array(\'smilies\', \'announcements_forum\', \'globalstick\', \'forums\',
            \'onlinelist\', \'forumstick\', \'threadtable_info\', \'threadtableids\', \'stamps\', \'diytemplatenameforum\'),
    \'viewthread\'    => array(\'smilies\', \'smileytypes\', \'forums\', \'usergroups\',
            \'stamps\', \'bbcodes\', \'smilies\',    \'custominfo\', \'groupicon\', \'stamps\',
            \'threadtableids\', \'threadtable_info\', \'posttable_info\', \'diytemplatenameforum\'),
    \'redirect\'    => array(\'threadtableids\', \'threadtable_info\', \'posttable_info\'),
    \'post\'        => array(\'bbcodes_display\', \'bbcodes\', \'smileycodes\', \'smilies\', \'smileytypes\',
            \'domainwhitelist\', \'albumcategory\'),
    \'space\'        => array(\'fields_required\', \'fields_optional\', \'custominfo\'),
    \'group\'        => array(\'grouptype\', \'diytemplatenamegroup\'),
);
复制代码

3 )如果mod参数为空或者不合法都会让表达式为真,导致值为index

$mod = !in_array(C::app()->var[\'mod\'], $modarray) ? \'index\' : C::app()->var[\'mod\'];

4 )做初始化

复制代码
define(\'CURMODULE\', $mod);
//var_dump(CURMODULE);
$cachelist = array();
if(isset($modcachelist[CURMODULE])) {//如果当前缓存项存在的话,
    $cachelist = $modcachelist[CURMODULE];//获取当前缓存组的缓存列表项

    $cachelist[] = \'plugin\';
    $cachelist[] = \'pluginlanguage_system\';
}
if(C::app()->var[\'mod\'] == \'group\') {
    $_G[\'basescript\'] = \'group\';
}

C::app()->cachelist = $cachelist;
C::app()->init();//初始化


loadforum();


set_rssauth();


runhooks();
复制代码

5 )加载控制器

$navtitle = str_replace(\'{bbname}\', $_G[\'setting\'][\'bbname\'], $_G[\'setting\'][\'seotitle\'][\'forum\']);
$_G[\'setting\'][\'threadhidethreshold\'] = 1;
//var_dump($mod);
require DISCUZ_ROOT.\'./source/module/forum/forum_\'.$mod.\'.php\';

分类:

技术点:

相关文章: