zoukankan      html  css  js  c++  java
  • 对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';
    php菜鸟俱乐部 php菜鸟club
  • 相关阅读:
    我们都可以把它放 Sidecar 容器中,这样微服务具备了 Super power,一种超能力
    DP 状态 DP 转移方程 动态规划解题思路
    完全二叉树 原因 完全二叉树最后一层节点靠左的原因
    延时任务最佳实践方案总结
    b+ 树 只存储 索引
    埋点质量保障体系建设
    linux命令重定向>、>>、 1>、 2>、 1>>、 2>>、 <
    卡特兰数
    python 使用函数名的字符串调用函数(4种方法)_black-heart的专栏-CSDN博客 https://blog.csdn.net/mrqingyu/article/details/84403924
    12 | 服务注册与发现如何满足服务治理
  • 原文地址:https://www.cnblogs.com/dfzz/p/4331902.html
Copyright © 2011-2022 走看看