discuz hook 对应php 代码,理解Discuz X 插件 HOOK钩子机制

在系统的根目录下的查看文件如forum.php  home.php等,打开后都可看到 有一个runhooks();它就是系统运行钩子程序

加载插件程序开始!

/**

* 运行钩子

*/

function runhooks() {

/**

* HOOKTYPE 钩子的类型:hookscript(设计插件时"页面嵌入-普通版") hookscriptmobile("页面嵌入-手机版")

*/

if(!defined('HOOKTYPE')) {

define('HOOKTYPE', !defined('IN_MOBILE') ? 'hookscript' : 'hookscriptmobile');

}

if(defined('CURMODULE')) {

global $_G;

if($_G['setting']['plugins'][HOOKTYPE.'_common']) {

hookscript('common', 'global', 'funcs', array(), 'common');

}

hookscript(CURMODULE, $_G['basescript']);

}

}

/**

* 执行插件脚本

*/

function hookscript($script, $hscript, $type = 'funcs', $param = array(), $func = '') { }

hookscript这个函数就不详细的说明了!比较长。

这个函数当中也没有什么难点,其中有一个是$_G['setting'][HOOKTYPE]可以不太清楚,这个是在后台,更新缓存时,系统自动的判断你安装完成的插件当中有没有选择"页面嵌入-普通版"和"页面嵌入-手机版"的模块,如果有,它会在更新缓存时,更新到$_G['setting'][HOOKTYPE]当中,更新$_G['setting'][HOOKTYPE],缓存文件为function/cache/cache_setting.php当中的get_cachedata_setting_plugin()为更新插件信息的函数

运行这个函数以后,它会生成一上$_G['setting']['pluginhooks']的一个数组,这个数组主要记录你的插件执行以后,要执行的内容或者输出的内容!

在加载模板的时候,如果这个模板当中有这个钩子,如{hook/XXXX},系统的模板转化程序就会将,class_template.php会将其中的,钩子程序替换成$_G['setting']['pluginhooks']当的数据,生成对应的模板缓存文件或信息,在调用时,它就执行了了!

这就是微学网-程序员之家为你提供的"理解Discuz X 插件 HOOK钩子机制"希望对你有所帮助.本文来自网络,转载请注明出处:http://www.weixuecn.cn/article/7420.html

你可能感兴趣的:(discuz,hook,对应php,代码)