本文由 FlintHub 开发文档归档发布。原始文档日期见标题前缀,来源:WWW/plugins/medal/说明.md。
勋章中心(medal)插件说明
版本:1.0.0 | 作者:SoSite | 状态:⏸️ 停用(默认未启用)
功能:勋章系统——后台定义勋章(内置图标 + 颜色,可传图片)、自动/手动颁发、用户佩戴 1–3 枚并展示于帖子楼层 / 个人主页 / 右栏
一、功能简介
- 自定义勋章:后台定义勋章(名称 / 图标 + 颜色 / 描述 / 排序 / 状态,可上传图片
image) - 颁发规则:
manual手动,或按thread_count(发帖数)/post_count(回帖数)/reg_days(注册天数)/points(积分)条件自动颁发 - 佩戴展示:用户佩戴 1–3 枚(
WEAR_LIMIT = 3),展示于帖子楼层 / 个人主页 / 右栏 - 积分商城联动:
points_mall_medal_redeem钩子支持积分兑换勋章 - 前台勋章墙:浏览全部可领取 / 已获得勋章
二、目录结构
plugins/medal/
├── plugin.json # 插件清单(init_after / route_register / admin_route_register / nav_plugin_links / points_mall_medal_redeem / thread_create_after / post_create_after / auth_register_after / controller_view_before)
├── Plugin.php # 建表(3 表)+ 勋章业务(佩戴 / 自动规则 / 颁发)
├── MedalController.php # 前台勋章墙(列表 / 佩戴设置)
├── AdminMedalController.php # 后台勋章管理(/admin/medals)
├── hook/ # init_after / route_register / admin_route_register / nav_plugin_links / points_mall_medal_redeem / thread_create_after / post_create_after / auth_register_after / controller_view_before
├── views/ # admin.php / index.php(勋章墙)
└── lang/ # zh.php / en.php / zh_tw.php三、数据表(插件独立库 plugins/medal/data/medal.sqlite)
| 表 | 用途 |
|---|---|
medals | 勋章定义(name / icon / color / description / condition_type / condition_value / sort / status / image) |
user_medals | 用户获得记录(user_id / medal_id / source[auto |
user_medal_wears | 佩戴记录(user_id / medal_id / wear_sort,UNIQUE(user_id, wear_sort) 与 UNIQUE(user_id, medal_id)) |
四、路由
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /medals | 前台勋章墙(全部 / 已获得 / 佩戴设置) |
| POST | /medals/wear | 保存佩戴(1–3 枚,CSRF) |
| GET | /admin/medals | 后台勋章管理 |
| POST | /admin/medals/add / edit / delete | 后台增删改 |
| POST | /admin/medals/save-rule | 保存自动颁发规则 |
五、核心规则
- 自动颁发:触发钩子(发帖 / 回帖 / 注册 / 积分变动 / 登录)时按
condition_type+condition_value判断,达标INSERT OR IGNORE到user_medals - 佩戴去重:
UNIQUE(user_id, medal_id)保证同枚勋章只佩戴一次;UNIQUE(user_id, wear_sort)保证槽位不冲突 - 手动颁发由后台直接添加,
source='manual'
六、注意事项
- 卸载删表会清空全部勋章定义、用户获得与佩戴记录,请谨慎
- 佩戴上限 3 枚为常量
WEAR_LIMIT,可通过改插件代码调整 - 图标使用内置图标名 + 颜色;
image非空时以图片优先展示