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中的模块载入》。

  • 相关阅读:
    奇数阶魔方问题
    《DSP using MATLAB》示例9.3
    《DSP using MATLAB》示例9.2
    《DSP using MATLAB》示例9.1
    找个目标很重要
    《DSP using MATLAB》示例Example 8.30
    《DSP using MATLAB》示例Example 8.29
    《DSP using MATLAB》示例Example 8.28
    《DSP using MATLAB》示例Example 8.27
    《DSP using MATLAB》示例Example 8.26
  • 原文地址:https://www.cnblogs.com/eastson/p/3363839.html
Copyright © 2011-2022 走看看