隐藏内容

隐藏内容

为帖子增加隐藏内容功能,支持 6 种解锁方式

插件 v1.0.0 贰先生 积分 阅读 付费 10 金币

功能

  • 为帖子增加隐藏内容功能,支持 6 种解锁方式:回复可见、登录可见、积分购买、用户组等级、指定用户、勋章权限

  • 每种解锁方式独立开关,可按需启用/禁用

  • BBCode 标签 [hidden type="xxx" params="yyy"]内容[/hidden] + HTML 标签双格式解析

  • 帖子内容保留 [hidden] 标签原文(方便编辑),同时提取内容到独立表

  • 编辑帖子时增量更新隐藏内容记录(按 hidden_index 对齐,删除多余的)

  • 权限判断:作者本人/管理员/版主(可配置)始终可见

  • 积分购买:扣买家积分 → 写购买记录 → 结算给作者(扣平台抽成)→ 通知作者

  • 平台抽成比例可配置(0-100%),作者所得 = 价格 × (100 - 抽成%) / 100

  • 已解锁用户头像列表:社会证明刺激付费(仅 credit 类型有效,可配置展示数量)

  • 帖子列表页标识:标题后显示锁图标(可配置开关)

  • 静态缓存:帖子隐藏内容、主题是否有隐藏内容、已解锁用户列表,避免列表页 N+1

  • 批量预加载:preloadHiddenByPostIds / preloadThreadHasHidden

  • 操作日志:记录所有状态变更(create/update/delete/purchase/refund/author_settle/notify)

  • 后台管理:统计概览 + 购买记录查询 + 退款(积分原路退回)

  • 多种帖子列表模板支持:inc / masonry / timeline / card

文件结构

plugin/xnx_hidden/
├── conf.json
├── install.php / uninstall.php
├── setting.php + view/htm/setting.htm
├── update.md
├── model/
│   └── HiddenService.php         # 核心服务(CRUD / 解析 / 权限 / 购买 / 渲染 / 日志)
├── route/
│   ├── admin_hidden.php          # 后台统计 + 购买记录 + 退款
│   └── api_hidden.php            # 前台 AJAX(购买解锁 / 获取已授权内容)
├── hook/
│   ├── model_inc_file.php
│   ├── model_route_table_end.php
│   ├── index_route_case_end.php / admin_index_route_case_end.php  # 注册路由
│   ├── model_thread_create_end.php     # 发帖时解析 [hidden] 标签
│   ├── model_post_create_end.php       # 回帖时解析(支持回帖含隐藏)
│   ├── model_post_update_end.php       # 编辑帖子时增量更新
│   ├── post_create_htmx_reply_end.php  # htmx 回帖后解析
│   ├── model_thread_delete_end.php     # 删主题级联删
│   ├── model_post_delete_end.php       # 删回帖级联删
│   ├── model_thread_format_end.php     # 列表页标记是否有隐藏内容
│   ├── model_post_format_end.php       # 帖子格式化时渲染隐藏块
│   ├── model_thread_find_preload.php   # 批量预加载
│   ├── post_end.htm / post_ref_thread_after.htm  # 帖子详情渲染
│   ├── post_js.htm / thread_js.htm     # 注入交互 JS
│   ├── thread_list_inc_subject_after.htm
│   ├── thread_list_masonry_subject_after.htm
│   ├── thread_list_timeline_subject_after.htm
│   ├── thread_list_card_subject_after.htm
│   ├── header_link_after.htm           # 引入 CSS
│   ├── lang_zh_cn_bbs.php
│   ├── lang_zh_tw_bbs.php
│   └── lang_en_us_bbs.php
├── lang/                          # 独立语言包目录
│   ├── zh-cn.php
│   ├── zh-tw.php
│   └── en-us.php
├── admin/view/htm/hidden_admin.htm
├── static/
│   ├── css/hidden.css
│   └── js/hidden.js
└── view/htm/
    ├── setting.htm
    └── hidden_modal.htm

配置流程

  1. 后台启用插件

  2. 进入「插件设置」→ 勾选要启用的解锁方式(回复/登录/积分/等级/用户/勋章)

  3. 配置默认积分类型、默认价格、平台抽成百分比

  4. 可选:开启「已解锁用户头像展示」并配置展示数量

  5. 可选:开启「管理员绕过」「列表页显示锁图标」

  6. 测试:发帖时插入 [hidden type="reply"]内容[/hidden],另一账号未回复时看到锁块,回复后自动显示内容

  7. 测试积分购买:发帖时插入 [hidden type="credit" params="credits:10"]内容[/hidden],另一账号点击购买按钮扣 10 积分后可见

扩展说明

本插件的 HiddenService 可被其他插件调用,用于在非标准帖子场景下复用隐藏内容能力。

Service 类与关键方法签名

  • HiddenService::getSettings():读取插件设置(含默认值兜底)

  • HiddenService::getHiddenByPostId($pid):获取帖子的隐藏内容列表(带静态缓存)

  • HiddenService::getHiddenByTid($tid):获取主题下所有隐藏内容

  • HiddenService::getHidden($id):获取单条隐藏内容

  • HiddenService::createHidden($data):创建隐藏内容记录

    • $data = ['post_id'=>int, 'tid'=>int, 'author_uid'=>int, 'permission_type'=>string, 'permission_params'=>string, 'content'=>string, 'hidden_index'=>int]

  • HiddenService::updateHidden($id, $data):更新隐藏内容

  • HiddenService::deleteHidden($id):删除单条(级联删购买记录)

  • HiddenService::deleteByPostId($pid) / deleteByTid($tid):批量删除

  • HiddenService::parseAndSave($pid, $tid, $uid, $message):解析 message 中的 [hidden] 标签并存储

  • HiddenService::checkPermission($hidden, $uid, $gid, $authorUid):检查用户是否有权查看

    • 返回 bool,内部按 permission_type 分发到 reply/login/credit/level/user/medal 6 种判断

  • HiddenService::purchaseUnlock($hiddenId, $uid):购买解锁(扣费 + 结算作者 + 通知 + 日志)

    • 返回 ['ok'=>bool, 'message'=>string, 'html'=>string]

  • HiddenService::refundPurchase($purchaseId):退款(积分原路退回 + 删购买记录 + 日志)

  • HiddenService::renderHiddenContent($hidden):渲染已授权内容 HTML

  • HiddenService::renderLockedBlock($hidden, $uid, $gid):渲染未授权锁块 HTML

  • HiddenService::renderUnlockedUsers($hidden):渲染已解锁用户头像列表 HTML

  • HiddenService::threadHasHidden($tid) / postHasHidden($pid):检查是否有隐藏内容

  • HiddenService::preloadHiddenByPostIds($pids) / preloadThreadHasHidden($tids):批量预加载

  • HiddenService::getStats():统计概览(总数 + 购买总数 + 各类型数量)

  • HiddenService::log($hiddenId, $uid, $action, $extra):写入操作日志

permission_type 与 permission_params 格式

  • reply:无需 params,用户回过帖即可见

  • login:无需 params,登录用户即可见

  • credit:params 格式 积分类型:金额(如 credits:10golds:5

  • level:params 格式 gid1,gid2,...(逗号分隔的用户组 ID)

  • user:params 格式 uid1,uid2,username1,...(逗号分隔,支持 UID 和用户名混填)

  • medal:params 格式 medal_id1,medal_id2,...(逗号分隔的勋章 ID,依赖 xnx_medal 插件)


截图 3
v1.0.0 2026-07-22
作者信息
贰先生
贰先生 贰先生
XIUNOX开发者
3
应用
21
安装
2026-06
加入
应用详情
应用分类 插件
版本 v1.0.0
适用版本 1.1
开发者 贰先生
下载量 3
浏览 26
更新时间 2026-07-22
发布时间 2026-07-22
最新回复 2
查看全部
  • Laity Lv3
    我做了个悬赏插件😁
    3小时前
  • AI Lv1

    欢迎贰先生分享这款功能完善的隐藏内容插件!

    该插件设计严谨,特别是增量更新策略(hidden_index 对齐)有效解决了编辑时的数据同步难题,且 HiddenService 的开放调用能力增强了插件的可复用性。支持多种解锁方式及静态缓存预加载,能很好地平衡用户体验与性能。

    几点小建议供参考:

    1. 并发安全:积分购买涉及扣费与结算,建议在 purchaseUnlock 中使用数据库事务或乐观锁,防止超卖或资金不一致。
    2. 权限缓存:用户组等级(level)和勋章(medal)变化较频繁,注意缓存失效机制,避免用户获得权限后仍显示锁定。
    3. 兼容性:确认 htmx 交互在旧版浏览器或无 JS 环境下的降级体验。

    期待在后续版本中看到更多社区反馈与优化!【以上由 AI 自动回复,仅供参考】

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