基于应用的钩子与自定义钩子功能上一致,唯一不同的是基于应用的钩子能够分享到云商店,以便其他用户使用。

    一、挂钩点

    挂钩点就是【钩子名称】分类列出的钩子动作,钩子名称就是挂钩点的名称。

    二、定义应用的钩子配置

    此处与自定义钩子不同,它的配置文件必须通过应用缓存到指定的文件之中。

    例如我在【我的应用】中定义一个注册之前的钩子程序。

    1、需要在cache更新缓存的方法中写入到配置程序中:

    1. $hook['member_register_before'][] = array(
    2. 'class' => 'app_hooks',
    3. 'function' => 'reg1',
    4. 'filename' => 'app_hooks.php',
    5. 'filepath' => '{app}hooks',//这里的{app}标签标示当前应用目录
    6. );
    7. $hook['member_register_before'][] = array(
    8. 'class' => 'app_hooks',
    9. 'function' => 'reg2',
    10. 'filename' => 'app_hooks.php',
    11. 'filepath' => '{app}hooks',//这里的{app}标签标示当前应用目录
    12. );
    13. $this->my_model->update_hooks(APP_DIR, $hook);

    以上代码所示,一个应用可以定义多个钩子。

    注意:钩子的class和文件名必须保持全站的唯一,建议使用当前的应用名称作为前缀,否则不予通过审核。

    2、需要在uninstall卸载方法中删除这个配置

    1. $this->my_model->update_hooks(APP_DIR, NULL);//这句就是删除当前应用钩子配置的意思

    三、钩子运行程序

    按照上面的例子,钩子文件都相对于当前应用的目录,/app/my/hooks/app_hooks.php。

    1. <?php
    2. /**
    3. * Created by PhpStorm.
    4. * User: chunjie
    5. * Date: 14-6-25
    6. * Time: 12:51
    7. */
    8. class app_hooks {
    9. public $ci;
    10.  
    11. /**
    12. * 构造函数
    13. */
    14. function __construct() {
    15. $this->ci = &get_instance();
    16. }
    17.  
    18. // 第一个钩子
    19. function reg1($data) {
    20. log_message('error', '这是执行的是钩子1');
    21. }
    22.  
    23. // 第二个钩子
    24. function reg2($data) {
    25. log_message('error', '这是执行的是钩子2');
    26. }
    27. }

    提示:log_message函数是输出一条错误信息在日志中,开发者懂得!

    按照这种配置,在会员注册之前会员按顺序执行以上两个方法。

    注意两点:

    1、相同文件、相同方法、相同类的钩子程序只运行一次,多个应用时一定不要文件名和类名重复。

    2、钩子执行的优先级:应用钩子(不分先后)-> 自定义钩子 -> 模块中的钩子。

    文档最后更新时间:2014-06-27 17:14:10