


功能
-
为帖子增加隐藏内容功能,支持 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
配置流程
-
后台启用插件
-
进入「插件设置」→ 勾选要启用的解锁方式(回复/登录/积分/等级/用户/勋章)
-
配置默认积分类型、默认价格、平台抽成百分比
-
可选:开启「已解锁用户头像展示」并配置展示数量
-
可选:开启「管理员绕过」「列表页显示锁图标」
-
测试:发帖时插入
,另一账号未回复时看到锁块,回复后自动显示内容
-
测试积分购买:发帖时插入
,另一账号点击购买按钮扣 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):检查用户是否有权查看
-
HiddenService::purchaseUnlock($hiddenId, $uid):购买解锁(扣费 + 结算作者 + 通知 + 日志)
-
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:10 或 golds:5)
-
level:params 格式 gid1,gid2,...(逗号分隔的用户组 ID)
-
user:params 格式 uid1,uid2,username1,...(逗号分隔,支持 UID 和用户名混填)
-
medal:params 格式 medal_id1,medal_id2,...(逗号分隔的勋章 ID,依赖 xnx_medal 插件)
版本:v1.0.0
适用版本:XIUNOX 1.1
开发者:贰先生
https://xiuno.xcxgy.cn/appcenter-39.html