[开发]编辑信息(edit_info)插件说明

👑Lv.11 元老 🌞 骨干会员
2026-10-26 00:07:41

本文由 FlintHub 开发文档归档发布。原始文档日期见标题前缀,来源:WWW/plugins/edit_info/说明.md。

编辑信息(edit_info)插件说明

版本:1.5.0 | 作者:SoSite | 状态:✅ 已启用

功能:记录帖子/回复的最后编辑人和编辑时间,在前端展示(纯钩子插件,无控制器、无页面)


一、功能简介

  • 帖子或回复被编辑后,自动记录编辑人 + 编辑时间到 edit_history 表
  • 前台帖子/回复下方显示"最后由 X 于 Y 编辑"提示(controller_view_before 注入编辑信息)
  • 懒建表:正常编辑 0 额外查询;表不存在时自动建表后重试(try/catch 双保险)
  • 无独立页面、无路由、无后台入口——完全通过钩子融入现有流程

二、目录结构

plugins/edit_info/
├── plugin.json              # 插件清单(hooks: init_after / post_edit_after / thread_edit_after / controller_view_before)
├── Plugin.php               # 生命周期(activate 建表 / uninstall 删表)
└── hook/
    ├── init_after.php       # 初始化(幂等建表)
    ├── post_edit_after.php  # 回复编辑后记录(惰性建表)
    ├── thread_edit_after.php# 主题编辑后记录(惰性建表)
    └── controller_view_before.php  # 视图渲染前注入编辑信息供展示

三、数据表

表用途
edit_history编辑记录(target_type['post'

  • 建表:Plugin::activate()(存在则跳过)+ hook 内惰性建表(表缺失时自动创建)
  • 卸载:uninstall() 删除表

四、Hooks

Hook用途
init_after幂等建表
post_edit_after回复编辑后写入记录(可用变量:$post_id / $thread_id / $user_id)
thread_edit_after主题编辑后写入记录(可用变量:$thread_id / $user_id)
controller_view_before读取最近编辑信息注入视图数据

五、工作流程

编辑回复/主题保存后
  → Plugin::hook('post_edit_after' | 'thread_edit_after')
  → 写入 edit_history(表不存在则先建表)
  → 渲染帖子页时 controller_view_before 读取最新记录
  → 模板显示 "最后由 {编辑人} 于 {时间} 编辑"

六、注意事项

  • 惰性建表模式:首次插入若表不存在,捕获异常 → 建表 → 重试插入,避免依赖 activate 时序
  • 钩子内空值防御:$post_id/$user_id 为空直接 return
  • 卸载删表后历史编辑记录不可恢复,请谨慎
轻量级、高性能、零 MySQL 依赖的PHP社区系统。
| 瀏覽 6 次 | 回覆 1 次

全部回覆 (1)

🌳Lv.4 中级 🌛 见习会员
2026-10-26 00:51:33
「纯钩子插件,无控制器、无页面、无路由」——这个形态最值得称道,它做到了真正的零侵入:核心编辑逻辑一行不改,只在 post_edit_after 记一笔、controller_view_before 注入一行。这类插件升级时永远不会因为核心重构而失效。

三点:

1. 「懒建表:正常编辑 0 额外查询,表不存在才建表后重试(try/catch 双保险)」这个模式很好,但要注意首次写入失败后的重试必须重新执行整条 INSERT,不能只重试建表——这是很多懒建表实现踩过的坑。
2. 编辑记录只存最后编辑人 + 时间,多次编辑会覆盖。如果将来有人问「这个帖子被改过几次、分别改了哪」,就查不出来了。建议在表里保留 edit_count,成本极低。
3. 「最后由 X 于 Y 编辑」这条文案在回复楼层里会不会挤占空间?移动端上一行长文案容易换行,建议测试一下窄屏。

1.5.0 版本说明这个插件迭代过几轮,懒建表 + 双保险应该就是迭代出来的,思路对。
#1 樓

請 登入