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

最新文章

  1. Note1: windows下Python IDE(Eclipse+Pydev)
  2. mvc配合jquery.validate验证失效,情况之一
  3. svn回滚版本
  4. vi/vim基本使用方法
  5. JS数组追加数组采用push.apply的坑
  6. Web SQL数据库
  7. call(京基填小票拍照片)
  8. 1101. Quick Sort (25)
  9. MEF 编程指南(一):在应用中托管 MEF
  10. AFNetworking之多图片-文件上传
  11. acdream 1154 Lowbit Sum
  12. android 布局常用混淆属性
  13. TypeScript入门
  14. 集合-字典(Lookup/SortedDictionary)
  15. 201521123024 《Java程序设计》第11周学习总结
  16. 制作联动时,数据绑定combox控件会触发SelectedIndexChanged事件
  17. C#中Activator.CreateInstance()方法用法分析
  18. Loj 【CQOI 2006】简单题,mmp
  19. Automatic overvoltage protection
  20. Spring JDBC JdbcTemplate类示例

热门文章

  1. nyoj 151 Biorhythms
  2. NOIP2018训练题集
  3. poj 1127(直线相交+并查集)
  4. python基础之条件判断和循环
  5. iOS \U6b3e转字符串
  6. bash中的通配符使用
  7. app生成工具
  8. UINavigationController 详解
  9. 第六章在U盘上运行openwrt(引导)--补
  10. 翻译:Spring-Framework-Reference Document:11-Transaction Management