正在加载文档...
系统钩子说明文档
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. 最佳实践
-
钩子命名规范:
- 后台钩子以
admincp_开头。 - 前台框架钩子以
run_开头。 - 前台应用钩子以
app_开头。 - 模板输出钩子为
template_output。
- 后台钩子以
-
钩子逻辑简洁:
- 钩子中的逻辑应尽量简洁,避免复杂的业务逻辑。
- 复杂的逻辑应封装到独立的服务类中,钩子中仅调用服务类方法。
-
钩子优先级:
- 钩子的执行顺序由系统框架控制,开发者应避免依赖钩子的执行顺序。
-
钩子调试:
- 可以通过
var_dump或日志记录调试钩子的触发时机和执行逻辑。
- 可以通过
通过合理使用系统钩子,开发者可以在不修改核心代码的情况下,灵活扩展系统的功能,提升开发效率和系统的可维护性。