程序主題的加載是通過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);