系统钩子说明文档

iCMS 系统钩子说明文档

TestHook 类定义了 iCMS 系统中的各种钩子(Hooks),用于在系统运行的不同阶段插入自定义逻辑。钩子分为三类:后台钩子前台框架钩子前台应用钩子。以下是各类钩子的详细说明。


1. 后台钩子 (admincp_ 开头)

后台钩子用于在后台管理系统的不同操作阶段插入自定义逻辑。

钩子名称 触发时机 参数说明 使用场景示例
admincp_run_start 后台请求开始时触发 初始化后台请求的全局变量或权限校验
admincp_run_end 后台请求结束时触发 $response: 响应数据 对后台请求的响应数据进行统一处理
admincp_common_saved 后台通用保存操作完成后触发 在数据保存后执行额外的逻辑(如日志记录)
admincp_article_add_end 后台文章添加操作完成后触发 在文章添加后执行额外的逻辑(如通知)
admincp_article_edit_end 后台文章编辑操作完成后触发 在文章编辑后执行额外的逻辑(如缓存清理)
admincp_article_saved 后台文章保存操作完成后触发 $data: 保存的数据 在文章保存后执行额外的逻辑(如更新索引)
admincp_node_saved 后台分类节点保存操作完成后触发 $data: 保存的数据 在分类节点保存后执行额外的逻辑(如更新导航)

2. 前台框架钩子 (run_ 开头)

前台框架钩子用于在前台框架运行的不同阶段插入自定义逻辑。

钩子名称 触发时机 参数说明 使用场景示例
run_begin 前台框架初始化开始时触发 初始化前台请求的全局变量或权限校验
run_begin2 前台框架初始化第二阶段触发 执行额外的初始化逻辑
run_begin_99 前台框架初始化最后阶段触发 执行最后的初始化逻辑
run_after 前台框架初始化完成后触发 在框架初始化后执行额外的逻辑
run_end 前台框架运行结束时触发 在框架运行结束时执行清理逻辑
run_destruct 前台框架销毁时触发 在框架销毁时执行清理逻辑

3. 前台应用钩子 (app_ 开头)

前台应用钩子用于在前台应用运行的不同阶段插入自定义逻辑。

钩子名称 触发时机 参数说明 使用场景示例
app_article_index_start 前台文章列表页开始时触发 在文章列表页加载前执行额外的逻辑
app_article_index_end 前台文章列表页结束时触发 在文章列表页加载后执行额外的逻辑
app_article_destruct 前台文章应用销毁时触发 在文章应用销毁时执行清理逻辑
app_index_destruct 前台首页应用销毁时触发 在首页应用销毁时执行清理逻辑
app_node_start 前台分类节点页开始时触发 在分类节点页加载前执行额外的逻辑
app_article_start 前台文章详情页开始时触发 在文章详情页加载前执行额外的逻辑
app_article_end 前台文章详情页结束时触发 在文章详情页加载后执行额外的逻辑
app_index_start 前台首页开始时触发 在首页加载前执行额外的逻辑
app_index_index_start 前台首页列表页开始时触发 在首页列表页加载前执行额外的逻辑
app_index_end 前台首页结束时触发 在首页加载后执行额外的逻辑
app_index_index_end 前台首页列表页结束时触发 在首页列表页加载后执行额外的逻辑

4. 模板输出钩子 (template_output)

钩子名称 触发时机 参数说明 使用场景示例
template_output 模板输出时触发 $content: 模板输出内容 对模板输出内容进行统一处理(如压缩、替换)

5. 使用示例

5.1 后台钩子示例

class CustomHook
{
    public static function admincp_article_saved($data)
    {
        // 在文章保存后更新搜索引擎索引
        SearchEngine::updateIndex($data['id'], $data['title'], $data['content']);
    }
}

5.2 前台框架钩子示例

class CustomHook
{
    public static function run_begin()
    {
        // 初始化全局变量
        global $user;
        $user = User::getCurrentUser();
    }
}

5.3 前台应用钩子示例

class CustomHook
{
    public static function app_article_index_start()
    {
        // 在文章列表页加载前记录访问日志
        Log::write('Article index page accessed');
    }
}

5.4 模板输出钩子示例

class CustomHook
{
    public static function template_output($content)
    {
        // 压缩 HTML 输出
        return preg_replace('/\s+/', ' ', $content);
    }
}

6. 最佳实践

  1. 钩子命名规范

    • 后台钩子以 admincp_ 开头。
    • 前台框架钩子以 run_ 开头。
    • 前台应用钩子以 app_ 开头。
    • 模板输出钩子为 template_output
  2. 钩子逻辑简洁

    • 钩子中的逻辑应尽量简洁,避免复杂的业务逻辑。
    • 复杂的逻辑应封装到独立的服务类中,钩子中仅调用服务类方法。
  3. 钩子优先级

    • 钩子的执行顺序由系统框架控制,开发者应避免依赖钩子的执行顺序。
  4. 钩子调试

    • 可以通过 var_dump 或日志记录调试钩子的触发时机和执行逻辑。

通过合理使用系统钩子,开发者可以在不修改核心代码的情况下,灵活扩展系统的功能,提升开发效率和系统的可维护性。