Drupal启动阶段之四:系统变量

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

 

先看一看_drupal_bootstrap_variables()的代码:html

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,这样也是没有问题的。bootstrap

 

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

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

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

 

最后,装入启动模块。ui

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模块无论是什么请求,都会所有的被载入。与此对应的其它普通模块,则只会在须要时才会被载入。这是两种模块类型的重要区别。
url

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

相关文章
相关标签/搜索