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

相關文章
相關標籤/搜索