zblogphp150zero主题插件的加载过程

admin2023-01-181163

程序主题的加载是通过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);

网友评论