本文由 FlintHub 开发文档归档发布。原始文档日期见标题前缀,来源:暂存20260913/docs/改动说明 (11).md。
45 号更新:社区治理插件 mod_system(举报中心 + 通知联动 + 小黑屋)
范围:新增「社区治理(举报中心 + 通知联动 + 小黑屋)」插件,并完成核心框架注入(登录封禁拦截、全局写操作拦截、各内容操作后的举报按钮)、统一通知联动、页脚链接区改造。
应用方式:将本目录下文件按相对路径覆盖到站点根目录(
d:\phpstudy_pro\WWW\)同名位置即可。
一、改动文件清单
update/45/
├── 改动说明.md
├── app/
│ ├── Controllers/
│ │ └── AuthController.php 修改:登录前触发 auth_login_check 钩子 + 封禁拦截
│ ├── Core/
│ │ └── Router.php 修改:路由匹配前触发 route_before_dispatch 全局写操作拦截
│ └── Views/
│ ├── blog/
│ │ └── detail.php 修改:博客详情/评论后挂 举报 操作钩子
│ ├── layouts/
│ │ └── main.php 修改:前台页脚改两行结构 + 新增 footer_links 钩子位(徽章/小黑屋链接)
│ └── thread/
│ └── show.php 修改:主题内容/帖子内容后挂 举报 操作钩子
├── assets/
│ └── css/
│ └── modern.css 修改:移动端页脚 mn-footer-left 整行居中(与 mn-footer-right 一致)
└── plugins/
├── plugins_cache.json 修改:mod_system 的 12 个钩子注册(nav_main_links 已并入 footer_links)
└── mod_system/ 新增:社区治理插件
├── plugin.json hooks 注册、版本 1.0.0、activated=true
├── Plugin.php 安装建表(mod_reports/mod_bans/mod_logs/mod_notifications)、通知双写、举报逻辑
├── AdminController.php 后台:举报处理、封禁、日志
├── FrontController.php 前台:举报提交、通知中心、小黑屋公示、用户卡片
├── assets/style.css
├── data/ (.htaccess + web.config,sqlite 运行时库不随更新包分发)
├── hook/ x12:route_register / admin_route_register / admin_sidebar_links /
│ route_before_dispatch / auth_login_check / thread_operation_after /
│ post_operation_after / blog_detail_operation_after / blog_comment_operation_after /
│ profile_user_card_after / footer_links / nav_drawer_links
├── lang/ (zh.php + en.php + zh_tw.php)
└── views/ (_feedback / admin_config / admin_reports / blacklist / notifications)说明:plugins/mod_system/data/mod_system.sqlite 为运行时库文件,不在更新包内(首次访问插件由 Plugin.php 自动建表)。
二、改动内容详解
1. 新增 mod_system 插件
- 举报中心:
/mod-system/report(htmx POST 提交举报),后台/admin/mod-system/reports处理举报 → 可封禁用户/关闭举报,全程写mod_logs日志。 - 小黑屋公示:公开页
/blacklist,展示被封禁名单,profile_user_card_after在用户卡片处显示封禁标记。 - 封禁拦截:
auth_login_check阻止被封用户登录;route_before_dispatch对已封禁用户在写操作前全局拦截(登录页读$GLOBALS['mod_system_login_blocked']提示)。 - 内容操作钩子:
thread_operation_after / post_operation_after / blog_detail_operation_after / blog_comment_operation_after在主题/帖子/博客详情/评论后注入「举报」按钮,_feedback.php统一弹出反馈。 - 数据库表:
mod_reports、mod_bans、mod_logs、mod_notifications四张核心表。
2. 统一通知联动
Plugin::notify()采用双写:既写 mod_system 自己的mod_notifications表(作为兜底),也写入统一 notifications 表,前端只保留一个通知入口。- 已移除
nav_pc_user_links/nav_user_menu_items钩子及对应文件,导航收敛;/mod-system/notifications页面保留,作为通知插件卸载时的兜底。
3. 后台入口与配置
admin_sidebar_links注入后台侧边栏(举报中心/封禁名单/插件配置)。admin_config.php提供插件配置界面(可处理举报的高管用户组 ID 等,部分预留)。
4. 页脚链接区(footer_links 钩子)
main.php前台页脚由单行改为两行:上行 = flinthub-badge 徽章(左)+ 链接区(右);下行 = 「Powered by + © 版权」(左)+ 渲染统计(右)。- 链接区由
footer_links钩子输出:原顶栏「小黑屋」入口迁至此处,并加了「关于我们 / 网站地图 / 帮助中心」演示占位链接。 - 移动端(≤768px)页脚四行居中(徽章 / 链接 / 版权+Powered / 统计),
modern.css增加.mn-footer-left整行居中规则。 - 徽章对位修正:flinthub-badge.svg 的
width/height与viewBox比例不一致会产生约 4px 横向 letterbox,故 img 显式给width:138px;height:20px消除偏移。
三、验证结论
php -l:mod_system 全部 hook/view/控制器、AuthController、Router、main.php 均 0 语法错误;modern.css 无结构损坏。- 首页正常渲染(HTTP 200),12 个钩子注册成功,四张核心表创建正确。
- 刷新后台即可在「插件」中看到 mod_system 并已激活;前台页脚可见徽章 + 小黑屋链接区。
四、部署顺序
- 按相对路径覆盖以上文件(
plugins/mod_system/、plugins/plugins_cache.json、两个修改文件、四个核心注入文件、modern.css); - 若站点曾导出过页面缓存,请清理
data/runtime/pages/*.html(如存在)以便前台立即可见; - 后台「插件」确认 mod_system 处于激活状态(plugin.json 已带
activated:true,plugins_cache.json 已同步); - 验证:首页页脚看徽章与小黑屋链接;发帖/博客详情看「举报」按钮;后台侧边栏看「举报中心」;登录被封账号看拦截提示。
五、注意事项
- 本批次依赖既有插件运行时机制(
plugins_cache.json分发钩子),不可跳过plugins/plugins_cache.json; - mod_system 的
.sqlite运行时库请勿从备份还原覆盖(由代码自动建表);如需重置数据可直接删除该文件重启访问; - 「关于我们 / 网站地图 / 帮助中心」为页脚演示占位链接,指向未实现路由,如需可后续补做对应页面或删减。