>백엔드 개발 >PHP 튜토리얼 >discuz의 코드 분석 및 학습 (4) 포럼 입구 파일

discuz의 코드 분석 및 학습 (4) 포럼 입구 파일

WBOY
WBOY원래의
2016-08-08 09:28:181428검색

이것은 단지 실행 과정을 대략적으로 분석한 것입니다. 중요한 것은 mod 매개변수의 값을 얻고 그 값에 따라 컨트롤러를 로드하는 것입니다.

1) 애플리케이션 이름을 정의하고 필요한 두 파일을 로드합니다

<span>define</span>('APPTYPEID', 2<span>);
</span><span>define</span>('CURSCRIPT', 'forum'<span>);

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

2) modarray 배열은 mod 값 범위를 제한합니다

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

3) mod 매개변수가 비어 있거나 불법인 경우 표현식은 true가 되어 index 값이 반환됩니다

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

4) 초기화

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

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

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

loadforum();


set_rssauth();


runhooks();</span>

5) 로드 컨트롤러

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

위 내용을 포함하여 discuz(4)의 코드 분석 및 학습을 위한 포럼 입구 파일을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되길 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.