【XIUNOX插件】隐藏内容 v1.0.0
贰先生 4小时前

功能

  • 为帖子增加隐藏内容功能,支持 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. 测试:发帖时插入

    已解锁,无需重复解锁
    内容
    ,另一账号未回复时看到锁块,回复后自动显示内容

     

  7. 测试积分购买:发帖时插入

    已解锁,无需重复解锁
    内容
    ,另一账号点击购买按钮扣 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: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

上传的附件:
最新回复 (0)
全部楼主
返回