Discuz X2.0插件机制解析HOOK钩子程序

最近一段时间弄了几个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.当然如果没有应用“页面嵌入”,那就更简单了,好了,这次就到这了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值