[开发]SoSite 通知中心更新包(2026-08-11)

👑Lv.11 元老 🌞 骨干会员
2026-10-24 00:10:28

本文由 FlintHub 开发文档归档发布。原始文档日期见标题前缀,来源:8月12日的备份/update/11/README-部署说明.md。

SoSite 通知中心更新包(2026-08-11)

本目录包含 1 个新插件 + 3 个核心修改 + 1 个审核插件修改,按原目录结构放置。

覆盖方式:将本目录内所有文件按相同路径上传覆盖到站点根目录(如 D:/phpstudy_pro/WWW 或服务器对应路径)。

生成环境:PHP 8.2 / MySQL 5.7.26。


一、本包功能说明

新增 通知中心插件(plugins/notifications/),统一聚合全局通知:回复、点赞、积分变动、注册欢迎、内容审核结果。PC 顶栏图标 + 移动端用户菜单双入口,未读徽标,进页自动已读,支持批量删除与分页。

通知场景全景:

场景通知内容示例触发点
有人回复我的帖子张三 回复了你的帖子「帖子标题」(链接到对应楼层)核心 post_create_after
我的帖子/回复被点赞李四 赞了你的帖子「帖子标题」新增核心 hook vote_after
积分增加你通过 发帖 获得 2 积分新增核心 hook points_award_after
积分扣除你因 下载附件 扣除 5 积分新增核心 hook points_deduct_after
注册欢迎欢迎加入 SoSite!完善个人资料,开启社区之旅吧核心 auth_register_after
内容审核结果你的帖子「标题」已审核通过 / 未通过审核,原因:…content_review 新增 hook review_result_after

二、数据库变更(1 张新表,幂等,无需手动执行)

  • 新表 notifications:user_id / type / title / link / actor_name / summary / related_id / related_type / is_read / created_at
  • 由插件启用时 Plugin::activate() 创建(CREATE TABLE IF NOT EXISTS),hook/init_after.php 懒建兜底。

三、新增核心 hook(3 个,插件挂载点)

Hook触发位置参数
vote_afterapp/Controllers/ApiController.php 投票成功后type、id、vote、user_id(投票人)、owner_id(被赞人)
points_award_afterapp/Helpers/Points.php 加分后(调用方事务内)user_id、points、reason、related_id、related_type
points_deduct_afterapp/Helpers/Points.php 扣分提交后同上(points 为负数)

四、内容审核插件联动(方案 B:深度接管)

  • plugins/content_review/Plugin.php 的 approve() / reject() 末尾新增 review_result_after 广播(参数含 user_id / result / target_type / title / link / reason)
  • 通知插件监听该 hook,将审核结果写入统一 notifications 表
  • 审核插件自身的 review_notifications 表与 /review-notifications 页保留(双写,双保险)——审核插件关闭/卸载均不影响通知插件(通知插件只作为"接收方")

五、覆盖前必须做的事

备份服务器现状

把服务器上以下文件整体备份一份(zip 即可):

  • app/Helpers/Points.php
  • app/Controllers/ApiController.php
  • plugins/content_review/Plugin.php
  • plugins/notifications/(若已存在)

六、本包包含的文件清单(18 个)

新增插件(15 个)

plugins/notifications/
├── plugin.json                    # hooks 注册(10 个钩子)
├── Plugin.php                     # activate 建表 / uninstall DROP / add / getList / getTotal / getUnreadCount / markAllRead / deleteByIds
├── NotificationController.php     # /notifications 列表(进页自动已读、批量删除、分页)
├── views/index.php                # 通知列表视图(类型图标/未读高亮/全选删除/分页)
├── assets/style.css
└── hook/
    ├── init_after.php             # 懒建表兜底
    ├── route_register.php         # 注册 /notifications 路由
    ├── nav_pc_user_links.php      # PC 顶栏图标(bell + 未读徽标,Session 缓存 30s)
    ├── nav_user_menu_items.php    # 移动端用户菜单(图标+文字+未读徽标)
    ├── post_create_after.php      # 回复通知楼主(排除自己回自己)
    ├── vote_after.php             # 点赞通知作者(仅"赞",排除自己赞自己)
    ├── points_award_after.php     # 积分增加通知
    ├── points_deduct_after.php    # 积分扣除通知
    ├── auth_register_after.php    # 注册欢迎
    └── review_result_after.php    # 审核结果通知(content_review 联动)

修改(3 个)

文件改动
app/Helpers/Points.phpaward() 末尾加 points_award_after;deduct() 提交后加 points_deduct_after
app/Controllers/ApiController.phpvote() 成功后加 vote_after
plugins/content_review/Plugin.phpapprove() / reject() 末尾加 review_result_after 广播

七、部署步骤(推荐顺序)

  1. 备份(见第五节)
  2. 上传本 update 包全部文件,按路径覆盖
  3. 清插件缓存:删除站点根目录 plugins/plugins_cache.php(关键!hooks 映射缓存在其中,不删不生效)
  4. 后台"插件管理" → 启用「通知中心」(activated 默认 false,需手动启用)
  5. 清空模板编译缓存:protected/cache/templates/ 目录下文件(模板引擎会自动重建)
  6. 浏览器回归验证(见下)

八、回归验证清单

页面/场景检查点
PC 顶栏(登录态)用户名右侧、消息左侧出现 🔔 通知图标(未读时带数字)
移动端用户菜单出现"通知"入口(未读时带数字)
有人回复你的帖子通知中心出现「用户名 回复了你的帖子「标题」」,链接跳转对应楼层
他人点赞你的帖子/回复通知中心出现「用户名 赞了你的帖子/回复「标题」」
发帖/回帖/签到获积分通知中心出现「你通过 XXX 获得 N 积分」
注册新账号收到"欢迎加入"通知
启用 content_review 后审核帖子被通过/驳回 → 通知中心出现审核结果通知;/review-notifications 页仍正常
/notifications列表正常、进入自动已读、全选删除、分页

九、注意事项

  • 插件默认停用(activated: false),部署后需在后台手动启用
  • 通知未读数有 Session 缓存(30 秒),标记已读后徽标最多延迟 30 秒消失(属设计行为)
  • 积分通知在加分事务内写入(award 在调用方事务中),事务回滚时通知同步回滚,保证一致性
  • 点赞通知仅"赞"触发(点踩不打扰);自己赞自己/回自己不通知
  • 通知插件是"接收方",审核插件关闭/卸载不影响通知插件本体(只是不再产生审核通知)

本包由 2026-08-11 会话生成(通知中心插件 + 3 个核心 hook + 审核插件联动,方案 B 深度接管)。

轻量级、高性能、零 MySQL 依赖的PHP社区系统。
| 浏览 2 次 | 回复 0 次

全部回复 (0)

暂无回复

请 登录