程序主题的加载是通过c_system_base.php来实现的.在文件尾部,有如下代码.
if (is_readable($file_base = $GLOBALS['usersdir'] . 'theme/' . $GLOBALS['blogtheme'] . '/theme.xml')) {
$GLOBALS['activedapps'][] = $GLOBALS['blogtheme'];
}
if (is_readable($file_base = $GLOBALS['usersdir'] . 'theme/' . $GLOBALS['blogtheme'] . '/include.php')) {
require $file_base;
}
代码首先判断当前使用的模板文件夹下是否存在 theme.xml 文件,如果存在,将模板名称赋值给 $GLOBALS['activedapps'] 数组的第一个元素,然后判断是否存在 include.php 文件,这个文件是主题插件的主文件.如果存在则将文件包含进来.
$aps = $GLOBALS['zbp']->GetPreActivePlugin(); 获取预激活插件名数组,通过 $this->option['ZC_USING_PLUGIN_LIST'] 输出数组,没有在相关数据库和文件中找到这个项的设置,只在install文件夹中找到了 $zbp->option['ZC_USING_PLUGIN_LIST'] = 'AppCentre|UEditor|Totoro'; 这行相关代码.
然后循环获取插件名称,将其赋值到 $GLOBALS['activedapps'] 和 require 进来,然后会注册插件
foreach ($aps as $ap) {
if (is_readable($file_base = $GLOBALS['usersdir'] . 'plugin/' . $ap . '/plugin.xml')) {
$GLOBALS['activedapps'][] = $ap;
}
if (is_readable($file_base = $GLOBALS['usersdir'] . 'plugin/' . $ap . '/include.php')) {
require $file_base;
}
}
通过上一步之后,全局变量 plugins 就包涵了所有的插件名称和他需要执行的函数了,在这一步开始执行其函数.(如果对应函数存在的话.)
foreach ($GLOBALS['plugins'] as &$fn) {
if (function_exists($fn)) {
$fn();
}
}
最后,注销使用过的临时变量
unset($file_base, $aps, $fn, $ap, $op_users, $opk, $opv);