emlog 全量挂载点详解手册
适用对象:emlog 插件开发者、模板开发者
数据来源:基于实际源码
最后更新:Pro 2.6.28
一、什么是挂载点
emlog 采用 钩子机制 实现插件与核心的解耦。核心思想很简单:
doAction('钩子名')—— 在源码/模板中"埋点",标记一个可被扩展的位置addAction('钩子名', '回调函数')—— 插件在运行时"挂载"自己的函数到指定钩子
当程序执行到 doAction() 时,所有挂载到该钩子的插件函数会依次自动调用。
// 核心/模板中埋点
doAction('index_head');
// 插件中挂载
addAction('index_head', 'my_plugin_header');
function my_plugin_header() {
echo '<!-- 我的插件已加载 -->';
}
二、前台模板挂载点
位于前台(博客访问端)模板文件中,用于向访客页面注入内容。
| 挂载点 | 典型位置 | 说明 | 常见用途 |
|---|---|---|---|
index_head | header.php<head> 内 | 前台头部扩展 | 加载 CSS / JS / meta 标签 |
index_footer | footer.php 底部 | 前台底部扩展 | 统计代码、底部 JS |
index_loglist_top | log_list.php 列表顶部 | 文章列表上方 | 首页公告、置顶横幅 |
index_navi_ext | 导航栏 HTML 末尾 | 导航栏追加 | 插件入口链接、搜索框 |
log_related | echo_log.php 正文下方 | 相关文章区域 | 相关文章、文章底部广告 |
ja_related | 日志详情页 | 相关文章(旧版兼容) | 兼容旧插件 |
diff_side | 侧边栏区域 | 侧边栏扩展 | 自定义小工具 |
rss_display | RSS 输出 | RSS 内容扩展 | RSS 广告、版权声明 |
log_direct_link | 日志链接 | 链接处理 | 外链跳转、链接转换 |
search_log_list | 搜索结果页 | 搜索列表扩展 | 搜索增强、结果处理 |
sort_log_list | 分类列表页 | 分类列表扩展 | 分类描述、分类广告 |
page_not_found | 404 页面 | 404 内容扩展 | 自定义 404、死链记录 |
三、后台管理挂载点
位于 admin/ 目录,用于扩展后台功能。
| 挂载点 | 所在文件 | 说明 | 常见用途 |
|---|---|---|---|
adm_head | admin/views/header.php | 后台所有页面头部 | 后台 CSS / JS |
adm_footer | 后台页脚 | 后台底部 | 后台统计、版本信息 |
adm_main_top | 后台首页顶部 | 主页面顶部 | 系统公告、待办提醒 |
adm_main_content | 后台主内容区 | 主内容扩展 | 仪表盘小部件 |
adm_menu | 后台侧边栏 | 一级菜单(管理员) | 插件后台入口 |
adm_comment_display | 评论管理页 | 评论列表扩展 | 评论审核增强 |
adm_link_display | 链接管理页 | 友链管理扩展 | 链接审核、批量操作 |
adm_navi_display | 导航管理页 | 导航管理扩展 | 自定义导航类型 |
adm_sort_add | 分类添加页 | 分类表单扩展 | 分类自定义字段 |
adm_writelog_head | 写文章页头部 | 写文章资源加载 | 编辑器增强、写作辅助 |
adm_writelog_bar | 写文章工具栏 | 编辑器工具栏 | 自定义按钮、快捷插入 |
adm_writelog_side | 写文章侧边栏 | 编辑页侧边 | SEO 面板、缩略图 |
adm_write_page_side | 写页面侧边栏 | 页面编辑侧边 | 页面模板选择 |
四、日志操作挂载点
在日志(文章)的创建、修改、删除生命周期中触发。
| 挂载点 | 触发时机 | 参数 | 说明 |
|---|---|---|---|
save_log | 保存日志时 | $blogid, $pubPost, $logData | 推送、缓存清理、自动生成摘要 |
before_del_log | 删除日志前 | $key(日志ID) | 删除前备份、拦截 |
del_log | 删除日志时 | $key(日志ID) | 清理关联数据、删除附件 |
approved_log | 审核通过 | — | 审核通知 |
rejected_log | 审核拒绝 | — | 拒绝处理 |
down_log | 日志被访问/下载 | — | 阅读统计、下载计数 |
save_page | 保存页面时 | — | 页面缓存更新 |
save_sort | 保存分类时 | — | 分类缓存刷新 |
五、评论操作挂载点
| 挂载点 | 触发时机 | 说明 |
|---|---|---|
comment_post | 发表评论前 | 垃圾评论拦截、验证码校验 |
comment_saved | 评论保存后 | 邮件通知、评论计数 |
comment_reply | 回复评论时 | @提醒、回复通知 |
pub_comment | 评论公开时 | 公开评论处理 |
六、用户相关挂载点
| 挂载点 | 触发时机 | 说明 |
|---|---|---|
login_head | 登录页头部 | 自定义登录页样式 |
login_ext | 登录表单 | 第三方登录按钮 |
login_succeed | 登录成功 | 记录登录日志 |
login_fail | 登录失败 | 安全拦截、失败计数 |
signup_ext | 注册表单 | 额外注册字段 |
register_succeed | 注册成功 | 欢迎邮件、初始化 |
delete_user | 删除用户 | 清理用户数据 |
user_menu | 用户中心菜单 | 个人中心导航 |
user_main_content | 用户中心主内容 | 个人中心扩展 |
blogger_ext | 博主信息 | 博主资料展示 |
send_email_code | 发送邮箱验证码 | 邮箱验证 |
七、附件与媒体挂载点
| 挂载点 | 说明 |
|---|---|
attach_upload | 附件上传时,可用于格式限制、自动压缩 |
del_media | 删除媒体时,清理缩略图等关联文件 |
八、互动与社交挂载点
| 挂载点 | 说明 |
|---|---|
like_post | 点赞 |
dislike_post | 点踩 |
collect_post | 收藏发表 |
collect_saved | 收藏保存后 |
post_note | 发表笔记/微语 |
九、模板与系统挂载点
| 挂载点 | 说明 |
|---|---|
tpl_options_get | 模板设置参数获取,用于模板选项面板 |
十、插件开发实战示例
示例 1:向前台头部注入 CSS
addAction('index_head', 'myplugin_front_css');
function myplugin_front_css() {
$css_url = BLOG_URL . 'content/plugins/myplugin/style.css';
echo '<link rel="stylesheet" href="' . $css_url . '">' . "\n";
}
示例 2:在导航栏添加入口
addAction('index_navi_ext', 'myplugin_navi_link');
function myplugin_navi_link() {
echo '<li><a href="' . BLOG_URL . '?plugin=myplugin">我的插件</a></li>';
}
示例 3:日志保存后自动推送
addAction('save_log', 'myplugin_after_save');
function myplugin_after_save($blogid, $pubPost, $logData) {
if ($pubPost) {
$url = BLOG_URL . '?post=' . $blogid;
// 推送逻辑...
}
}
示例 4:后台菜单注册
addAction('adm_menu', 'myplugin_admin_menu');
function myplugin_admin_menu() {
echo '<li><a href="./plugin.php?plugin=myplugin">我的插件</a></li>';
}
十一、开发规范与建议
- 函数名加前缀:避免与其他插件冲突,如
myplugin_前缀 - 优先使用官方挂载点:不要为了装插件而修改核心代码
- 模板保留核心钩子:至少保留
index_head、index_footer、index_loglist_top、log_related、index_navi_ext - 验证钩子存在性:不确定时
grep doAction(搜索源码确认 - 注意参数顺序:带参数的钩子,回调函数参数顺序必须与
doAction()调用时一致 - 性能意识:挂载点上的函数应尽量轻量,避免阻塞页面渲染
附录:完整挂载点速查表
adm_comment_display adm_footer adm_head
adm_link_display adm_main_content adm_main_top
adm_menu adm_navi_display adm_sort_add
adm_write_page_side adm_writelog_bar adm_writelog_head
adm_writelog_side approved_log attach_upload
before_del_log blogger_ext collect_post
collect_saved comment_post comment_reply
comment_saved del_log del_media
delete_user diff_side dislike_post
down_log download_resource index_footer
index_head index_loglist_top index_navi_ext
ja_related like_post log_direct_link
log_related login_ext login_fail
login_head login_succeed page_not_found
post_comment post_note pub_comment
register_succeed rejected_log rss_display
save_log save_page save_sort
search_log_list send_email_code signup_ext
sort_log_list tpl_options_get user_main_content
user_menu
📌 提示:不同 emlog 版本间挂载点可能存在差异,请以你当前部署版本的源码为准。更新清单命令:
THE END
©
分享文章
下一篇没有了
搜索
热门文章
最新评论

Admin















评论列表 (0)
还没有评论,告诉我们你的想法。