帖子状态标记

帖子状态标记

为帖子设置状态标签(如未解决/已解决),支持积分奖励、贡献排行榜、状态筛选,提升内容管理效率

插件 v2.1.0 Twelve 分享 积分 付费 20 金币

xnx_status 帖子状态标记

功能

  • 为帖子设置状态标签(如未解决 / 已解决 / 审核中 / 酷站 / 干货 等),按分类(0 内容标记 / 1 Bug 反馈)管理
  • 安装时内置 11 个预设状态(未解决、已解决、审核中、需补充、无法复现、酷站、干货、教程、资源分享、已排期、已优化)
  • 积分奖励:标记状态时给帖子作者发放积分 / 金币 / 人民币(防反复切换刷积分,仅在从未发放过时发放)
  • 审核联动:状态可配置 audit_action(0 无 / 1 设为待审核 / 2 设为已通过),自动更新 thread.audit_status
  • 通知:状态变更时通过 notify_create 通知作者(含操作人、新状态、奖励信息)
  • 帖子列表徽章:批量查询帖子状态(getThreadStatusBatch),列表页显示状态标签
  • Bug 贡献排行榜:按周 / 月 / 全部统计作者贡献(已解决 / 已排期 / 已优化 / 其他 + 奖励总额),独立页面 status_rank.htm
  • 后台概览:各状态帖子计数、Bug 总数 / 已解决 / 处理中
  • 状态变更日志:记录每次状态切换的旧 / 新状态、操作人、操作时间
  • 「已解决」状态 ID 集合可多选配置,影响贡献排行与统计
  • 缓存:使用 CacheHelper::remember() + pluginDeletePrefix('status'),写操作后自动清理
  • 多语言(zh-cn / zh-tw / en-us)

文件结构

plugin/xnx_status/
├── conf.json
├── install.php / uninstall.php / upgrade.php   # 建 3 张表 + 预设状态 + 字段幂等迁移
├── setting.php                                 # 重定向到 admin_status.php?tab=settings
├── icon.png
├── model/
│   └── StatusService.php                        # 核心服务(CRUD / 状态管理 / 统计 / 权限)
├── route/
│   ├── admin_status.php                         # 后台管理(概览 / 选项 / 日志 / 状态帖子 / 贡献者 / 设置)
│   ├── api_status.php                           # AJAX 设置 / 清除帖子状态
│   └── status_rank.php                          # 前台 Bug 贡献排行榜
├── admin/view/htm/
│   └── status_admin.htm
├── view/htm/
│   └── status_rank.htm
├── static/js/status.js
└── hook/
    ├── model_inc_file.php                       # 自动加载 StatusService
    ├── model_route_table_end.php
    ├── index_route_case_end.php                 # 注册 status_rank 前台路由
    ├── admin_index_route_case_end.php           # 注册后台路由
    ├── index_site_brief_after.htm               # 首页注入贡献者 widget
    ├── thread_list_inc_start.htm
    ├── thread_list_inc_subject_before.htm       # 列表页状态徽章
    ├── thread_start.htm
    ├── thread_subject_badge_after.htm           # 详情页标题徽章
    ├── thread_plugin_body.htm                   # 详情页状态操作面板
    ├── thread_message_after.htm                 # 详情页奖励信息
    ├── thread_filelist_after.htm
    ├── thread_end.htm
    ├── thread_js.htm                             # 加载 status.js
    ├── lang_zh_cn_bbs.php
    ├── lang_zh_tw_bbs.php
    └── lang_en_us_bbs.php

配置流程

  1. 后台「插件管理」安装并启用 xnx_status
  2. 进入「插件设置」(自动跳转到 xnx_status?tab=settings)→ 配置:允许超级版主操作、开启通知、详情页显示奖励、列表显示徽章、贡献者 widget、已解决状态 ID 集合
  3. 切换到「状态选项」tab → 新增 / 编辑 / 删除状态(名称、颜色、奖励类型与金额、审核动作、分类、排序)
  4. 测试:在帖子详情页操作面板选择状态 → 触发积分奖励 + 通知 + 徽章更新;访问「Bug 贡献排行榜」查看排行
  5. 后台「变更日志」可追溯每次状态切换

扩展说明

StatusService 通过 hook/model_inc_file.php 自动加载,大量公开方法可被其他插件调用。

Service 类与方法签名

$ss = new StatusService();   // 构造时自动 CacheHelper::registerKeys('status', ...)

// ---- 状态选项 ----
$ss->getStatusList(int $category = -1): array   // -1 全部 / 0 内容标记 / 1 Bug 反馈,300s 缓存
$ss->getOption(int $id): array
$ss->addOption(array $data): array               // status_name / color / reward_type / reward_amount / audit_action / category / sort
$ss->updateOption(int $id, array $data): array
$ss->deleteOption(int $id): array                // 同步清除使用该状态的帖子关联

// ---- 帖子状态 ----
$ss->getThreadStatus(int $tid): array            // 单帖状态
$ss->getThreadStatusBatch(array $tids): array    // [tid => status_info] 批量查询,列表页用
$ss->setThreadStatus(int $tid, int $statusId, int $operatorUid): array
//   statusId=0 表示清除状态;内部依次:写日志 → 清除 / 校验选项 → 发放奖励(防重发)→ 更新/插入 → 联动审核动作 → 发送通知 → 清缓存

// ---- 统计与排行 ----
$ss->getResolvedStatusIds(): array               // 读取后台多选配置,空时回退名称匹配「已解决」「已优化」
$ss->getOverviewStats(): array                   // 60s 缓存,返回各状态计数 + bug_total/resolved/processing
$ss->getContributors(int $limit = 20, string $period = 'total'): array  // 300s 缓存,period: week/month/total
$ss->getThreadsByStatus(int $statusId, int $page, int $pagesize): array  // 按状态筛选帖子(过滤已删除)

// ---- 日志与权限 ----
$ss->getStatusLog(int $page, int $pagesize, int $filterStatus = 0): array
$ss->canOperate(int $gid): bool                  // gid=1 管理员;gid=2 受 allow_super_mod 控制

// ---- 静态方法 ----
StatusService::clearCache(): void                // CacheHelper::pluginDeletePrefix('status')
StatusService::badgeHtml(string $name, string $color): string  // 支持 Bootstrap 颜色名与 hex
StatusService::rewardTypeName(string $type): string

数据表与触发时机

  • xnx_status_option:状态选项(含 audit_actioncategoryreward_type / reward_amount
  • xnx_status_thread:帖子状态关联(主键 tid,含 reward_given 防重发奖励)
  • xnx_status_log:状态变更日志(每次 setThreadStatus 都会插入一条)
  • setThreadStatus 联动 CreditsService::add() 发放积分、notify_create() 通知作者、db_update('thread', audit_status) 联动审核状态、thread_forum_list_cache_delete($fid) 清理版块列表缓存
  • 缓存键通过 CacheHelper::registerKeys('status', ...) 注册:status_list / overview / contributors,写操作后通过 clearCache() 一并清理

版本 2.1.0 | 兼容 Xiuno 1.1+

v2.1.0 2026-08-03
作者信息
XiunoX 开发者,独立开发者 & 全栈工程师 DiscuzX 插件/模板、WordPress 主题/插件、XiunoX 框架二次开发、APP 与小程序自研项目。
27
应用
0
安装
2026-08
加入
应用详情
应用分类 插件
版本 v2.1.0
适用版本 1.1
开发者 Twelve
下载量 0
浏览 3
更新时间 2026-08-03
发布时间 2026-08-03
最新回复
查看全部
  • 暂无回复

查看全部评论 / 发表评论
完整评论功能在讨论帖中,点击前往