zoukankan      html  css  js  c++  java
  • Drupal启动阶段之四:系统变量

    Drupal的系统变量是指保存在后台数据库variable表中的一些参数设置,透过variable_get()和variable_set()存取:

    先看一看_drupal_bootstrap_variables()的代码:

    function _drupal_bootstrap_variables() {
      global $conf;
    
      // Initialize the lock system.
      require_once DRUPAL_ROOT . '/' . variable_get('lock_inc', 'includes/lock.inc');
      lock_initialize();
    
      // Load variables from the database, but do not overwrite variables set in settings.php.
      $conf = variable_initialize(isset($conf) ? $conf : array());
    // Load bootstrap modules. require_once DRUPAL_ROOT . '/includes/module.inc'; module_load_all(TRUE); }

    首先,初始化lock系统:

    require_once DRUPAL_ROOT . '/' . variable_get('lock_inc', 'includes/lock.inc');
    lock_initialize();

    注意这里在执行variable_initialize()之前就调用了variable_get()函数。是因为Drupal是通过全局变量$conf来保存系统变量的。$conf除了可以通过variable_initialzie()初始化以外,也可以通过settings.php初始化。settings.php对$conf的初始化在Drupal启动过程的第一步就完成了,所以在这里$confi也是可以用的。另外,即使settings.php没有初始化$conf,也可以使用variable_get()的默认值includes/lock.inc,这样也是没有问题的。

    然后,调用variable_initialize()读取数据库variable表的记录,合并到$conf:

    $conf = variable_initialize(isset($conf) ? $conf : array());

    关于variable表更详细的信息可以参考《Drupal如何处理系统变量?》。

    最后,装入启动模块。

    require_once DRUPAL_ROOT . '/includes/module.inc';
    module_load_all(TRUE);
    
    function module_load_all($bootstrap = FALSE) {
      static $has_run = FALSE;
    
      if (isset($bootstrap)) {
        foreach (module_list(TRUE, $bootstrap) as $module) {
          drupal_load('module', $module);
        }
        // $has_run will be TRUE if $bootstrap is FALSE.
        $has_run = !$bootstrap;
      }
      return $has_run;
    }

    Drupal的模块载入分为两类,一类是boostrap模块,另外一类是其它普通模块。boostrap模块必须会在Drupal启动过程中全部被载入。注意这里两个关键词:"必须"和“全部”,说明boostrap模块不管是什么请求,都会全部的被载入。与此对应的其它普通模块,则只会在需要时才会被载入。这是两种模块类型的重要区别。

    关于模块装入更详细的信息可以参考《Drupal中的模块载入》。

  • 相关阅读:
    币圈寒冬,过去两周内全球约60万矿商关机
    币圈人警惕!5大错误足以摧毁你的一切
    Doctype作用?标准模式与兼容模式各有什么区别?
    递归
    anguments
    fixed 和 absolute 定位的区别
    SublimeText 自带格式化代码功能
    css布局-双飞翼布局
    CSS布局-圣杯布局
    品字布局
  • 原文地址:https://www.cnblogs.com/eastson/p/3363839.html
Copyright © 2011-2022 走看看