最近一段时间弄了几个discuz的插件!研究了一下它的解析机制,供参考,请高手拍砖指正!
1. 阅读官方的 插件技术文档
2. 在系统的根目录下的查看文件如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']的一个数组,这个数组主要记录你的插件执行以后,要执行的内容或者输出的内容!
3.在加载模板的时候,如果这个模板当中有这个钩子,如{hook/XXXX},系统的模板转化程序就会将,class_template.php会将其中的,钩子程序替换成$_G['setting']['pluginhooks']当的数据,生成对应的模板缓存文件或信息,在调用时,它就执行了了!
4.当然如果没有应用“页面嵌入”,那就更简单了,好了,这次就到这了!
1. 阅读官方的 插件技术文档
2. 在系统的根目录下的查看文件如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']的一个数组,这个数组主要记录你的插件执行以后,要执行的内容或者输出的内容!
3.在加载模板的时候,如果这个模板当中有这个钩子,如{hook/XXXX},系统的模板转化程序就会将,class_template.php会将其中的,钩子程序替换成$_G['setting']['pluginhooks']当的数据,生成对应的模板缓存文件或信息,在调用时,它就执行了了!
4.当然如果没有应用“页面嵌入”,那就更简单了,好了,这次就到这了!