- 内容勘误台ID errata_center版本 1.1.0插件制作者 cxk123售价 30 积分2141 行 / 118.7 KBHook / 路由 / 后台页把「这篇帖子这里写错了 / 链接失效了 / 信息过期了」变成一张有人管的勘误单:收费插件安装说明购买后点击“授权码”获取一次性授权码;在后台 > 插件广场点击在线安装或更新,并填写该授权码。已购买用户更新免费:每次在线安装或更新前,重新点击“授权码”获取新的一次性授权码即可,无需再次购买;也可直接下载新版后用后台“插件上传”更新。尊重并感谢他人劳动,请勿传播代码。app/plugins/errata_center/plugin.php插件预览6 张开发日志已有 2 条
此项目接受所有登录用户协助维护和提交更新。
主楼 版本 1.0.0 更新:
首次上架(1.0.0)。市场里 勘误 / 纠错 / 失效链接 / 事实错误 / 内容错误 / 死链 / 校正 这一族词此前双源 0 命中
(全目录 392 条 + 站点两视图 430 条,连中文名一起查);核心侧同样没有任何「内容质量反馈」概念:app_topics/app_replies里只有主题与回帖本体,没有勘误、修订建议、受理状态任何字段。
于是站内现在的选择只有两个:要么装作没看见(读者发现了错字、过期信息、失效链接,无处可去),
要么在帖子里回一句(沉了就没了,作者也不知道哪条被处理过)。这一款补的是这条最短闭环:
读者提勘误 → 内容作者本人优先受理(管理团队兜底)→ 采纳 / 驳回都要留结论 → 公开墙与致谢,
全程只记录问题与结论:不替作者改帖、不处罚任何人、不发积分。- 入口在帖子与楼层里:主楼与每个回帖右下角的「更多」菜单里挂一项「勘误」,点进去就是带着目标
(主题 + 楼层 + 内容作者)的提交表单。逐楼钩子
post.ops_actions只拼一个链接、一条 SQL 都不发 ——
主题页「启用 = 停用」的语句数差值是 0,站点再大也不涨。- 提交表单:问题类型(错别字 / 信息过期 / 链接失效 / 事实错误 / 排版问题 / 其它,站长可改)+
问题说明(10–1000 字,服务端为准)+ 可见范围两档 + 可选证据截图 + 在办配额提示。
证据图只能从本人已上传的核心图片里选(服务端校验归属,绝不信表单),本站不复制文件、不接管上传。- 隐私优先:默认档就是最严的那一档。新建默认「仅当事人与管理团队」,选它之后这条勘误不进公开墙;
即便作者后来把它放上墙,游客与第三方在墙 / 搜索 / 详情三个面都拿不到私有说明原文、证据图与提交人名字 ——
列表、详情、搜索、我的、收件箱、后台六个面共用同一对函数(一条 SQL 谓词 + 一条 PHP 判据),不会随页面漂移。- 作者优先受理,管理团队兜底:受理人 = 内容作者本人或管理团队,其他人一律 404 且零写入(事务里核对)。
采纳(可以勾「致谢」,公开墙上留下提交人的名字)/ 未采纳(必须写一句理由,提交人要看得到)/
撤回(只有提交人本人)。公开档还带「我也遇到」附议,一人一条,唯一键保证重复点击不涨计数。- 三件并发都走 CAS:状态机
UPDATE … WHERE id=? AND status='open' [AND owner_id=?|author_id=?]+
rowCount()===1才写时间线、发通知、释放配额(两个会话同时采纳只有一个成功);
配额用独立配额表UPDATE … SET used=used+1 WHERE user_id=? AND used<?抢占,只有终态迁出才归还;
重复提交靠submit_key = sha1(uid|目标|类型|小写说明|时间窗)+UNIQUE(submit_key),
并发下撞键的那个请求回读复用赢家那一行,绝不产生重复行。- 不让勘误沉底:超过设定时间没人受理,计划任务自动提醒内容作者与管理团队(可再次升级)。
任务先写认领令牌批量认领、再按令牌回读,只给本次真正认领到的行写事件与通知,循环体内零查库;
事件与通知各一条多行 INSERT,与站点规模无关。- 悬空引用不崩页:勘误指向的主题 / 楼层被删 → 渲染「原内容已删除」占位块(单子不删、页面不 404);
证据附件被删 → 渲染「证据图已被删除」,不输出
<img>,绝不出现破图。- 自有表、零核心改动:五张
plugin_errata_center_*表(items / events / quota / supports / acks)+
八枚具名索引,不碰任何
app_*表;app.boot只比一个结构版本戳(0 条 SQL)就能幂等自愈建表补列;
卸载把表、索引、结构戳、任务行一起清干净。安装时配额表按「在办条数」精确重建,不是估算。- 三驱动可移植:无窗口函数、无
db_driver()分支、不手写ON CONFLICT/INSERT IGNORE
(幂等写入走核心的
app_db_insert_ignore())、时间一律 unix 秒整数、建删表索引只走app_db_*。- 页面级无 N+1:公开墙 4 条插件语句、详情 5 条、我的 / 收件箱各 5 条、后台 5 条
(核心只读批查另算且 ≤3 条,与行数无关);行数翻倍(10 → 20 → 30 条)后三个面的插件语句数完全不变。
本版为 v1.0.0 首次上架:验收套件 487 项通过 / 0 项失败(九节:结构 / 提交校验 / 证据归属 /
权限矩阵 8 夹具 × 5 身份 × 3 面 / 隐私三面同源 / 并发 / 页面预算 / 跨插件只读对账 / 卸载重装自愈),
七道静态门禁 0 违规 / 0 待人工确认,全仓suite_integrity_audit65 个套件七条全 ✓。插件质量报告
插件:
errata_centerHook 功能范围 循环 使用频率 文件读写 修改系统表 读写系统表 读写自己的表 app.boot 全站请求启动 否 5 - - - 写 plugin_errata_center_quota, plugin_errata_center_items, plugin_errata_center_events, plugin_errata_center_supports, plugin_errata_center_acks sidebar.feature_links 首页/侧栏快捷功能 否 5 - - - - user.menu_links 个人卡片/移动端我的菜单(展示位置:个人卡片) 否 4 - - - - post.ops_actions 非系统hook 否 1 - - - - 颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。“文件批处理”表示逐个处理用户一次提交的文件,属于必要操作,不标记修正。只有操作实际处于需要优化的循环路径时,才会标记“修正❗️”。
数据字典
plugin_errata_center_quota字段 类型 可空 默认值 约束 user_id uint 否 - 主键 used uint 否 0 - updated_at uint 否 0 - plugin_errata_center_items字段 类型 可空 默认值 约束 - 动态定义 - - 无法静态解析 plugin_errata_center_events字段 类型 可空 默认值 约束 - 动态定义 - - 无法静态解析 plugin_errata_center_supports字段 类型 可空 默认值 约束 - 动态定义 - - 无法静态解析 plugin_errata_center_acks字段 类型 可空 默认值 约束 - 动态定义 - - 无法静态解析 积分能不能便宜点
版本 1.1.0 更新:
1.1.0 · 勘误台的版块可见性- 修复(越权):公开勘误台渲染「目标内容」时此前没有版块可见性判定 ⇒ 「仅指定用户组可见」版块里的主题标题与详情链接会出现在公开勘误墙、勘误详情、搜索与后台列表四处。现在统一在一个取数收口点过滤(管理团队照常可见)。
- 口径:无受限版块时 SQL 文本逐字节不变;页面语句数增量 0。