【插件】打赏插件(Laity_tig)

在帖子页内打赏作者,支持自定义金额、留言、帖子内打赏榜、全站排行榜、防刷策略与后台撤销。

功能特性

  • 积分打赏 — 支持 credits / golds / rmbs 等多种积分类型,通过框架 CreditsService 事务扣款入账

  • 自定义金额 + 预设快捷按钮 — 后台可配置最多 6 个预设金额,用户也可手动输入

  • 打赏留言 — 可选开启,支持自定义最大字符数

  • 帖子内打赏榜 — 在帖子页嵌入打赏排行卡片,显示用户头像、留言、金额

  • 全站排行榜 — 打赏达人榜 + 收赏达人榜,独立分页展示

  • 防刷策略 — 同帖冷却时间、每日单用户累计上限、帖子发布最小年龄限制

  • 权限控制 — 按用户组白名单限制打赏人和被打赏人

  • 后台撤销 — 管理员可撤销打赏记录,自动退款并扣回(带原因记录)

  • 站内通知 — 打赏成功后自动发送通知给被打赏人

  • 三通道响应 — 同时支持 htmx / AJAX / 传统 form 提交,适配不同前端场景

  • 暗色模式 — 通过 prefers-color-scheme: dark 自动适配

  • 移动端适配 — 桌面端按钮自动重排至收藏按钮之后,移动端使用 chip 样式

安装

  1. Laity_tip 目录放入 plugin/ 目录

  2. 进入后台 → 插件管理 → 找到「打赏插件」→ 点击安装

  3. 安装脚本会自动创建数据表、写入默认设置、预热缓存

  4. 安装后点击「设置」进行配置

插件目录名必须为 Laity_tip(大小写敏感),否则框架无法识别。

配置说明

基本设置

  • 启用打赏:总开关,关闭后前台所有打赏 UI 隐藏(默认:开启)

  • 使用积分类型:对应 user 表字段名,可选 credits / golds / rmbs(默认:credits

  • 单次最小金额:最小打赏额度(默认:1

  • 单次最大金额:最大打赏额度(默认:10000

  • 每日单用户打赏上限0 表示不限(默认:0

  • 预设金额:弹窗快捷按钮,最多 6 个,用英文逗号分隔(默认:1, 5, 10, 50, 100


留言设置

  • 允许留言:是否允许打赏时附带留言(默认:开启)

  • 留言最大字符数:留言内容长度上限(默认:50


防刷设置

  • 冷却时间:同一用户对同一帖子的打赏间隔,单位秒,0 表示不限(默认:60

  • 帖子最小年龄:帖子发布后多久才允许被打赏,单位分钟,0 表示不限(默认:5

  • 允许自打赏:作者是否可给自己帖子打赏(默认:关闭)


权限控制

  • 允许打赏的用户组:留空表示所有用户组均可(默认:不限)

  • 允许接收打赏的用户组:留空表示所有用户组均可(默认:不限)


展示设置

  • 打赏榜显示条数:帖子页内嵌排行榜的显示数量(默认:5

  • 排行页每页条数:全站排行榜分页大小(默认:20

  • 在帖子页显示打赏信息:显示总额和打赏榜卡片(默认:开启)

  • 显示打赏按钮:在帖子底部互动区显示打赏按钮(默认:开启)

  • 启用全站排行页:是否开放独立的全站排行榜页面(默认:开启)

文件结构


plugin/Laity_tip/

├── conf.json # 插件元信息 & hook 注册

├── install.php # 安装脚本(建表、写设置、预热缓存)

├── uninstall.php # 卸载脚本(删表、清设置、清缓存)

├── upgrade.php # 升级脚本(幂等迁移)

├── setting.php # 后台设置控制器

├── README.md # 本文件

├── model/

│ └── LaityTipService.php # 核心服务类(校验、事务、查询、头像渲染、缓存)

├── route/

│ ├── thread_tip.php # 打赏提交路由(POST,三通道响应)

│ ├── laity_tip_open.php # 打赏弹窗渲染

│ ├── laity_tip_revoke.php # 撤销打赏

│ ├── laity_tip_log.php # 打赏记录管理(后台)

│ ├── laity_tip_rank.php # 全站排行榜页

│ ├── laity_tip_sent.php # 我发出的打赏

│ ├── laity_tip_received.php # 我收到的打赏

│ └── laity_tip_label.php # 打赏信息标签

├── hook/

│ ├── model_inc_file.php # 注册 Service + 缓存 key

│ ├── model_route_table_end.php # 注册路由

│ ├── model_thread_delete_end.php # 删帖时清理打赏记录

│ ├── model_post_delete_end.php # 删楼时清理打赏记录

│ ├── index_route_case_end.php # 前台路由派发

│ ├── admin_index_route_case_end.php # 后台路由派发

│ ├── lang_zh_cn_bbs.php # 语言包

│ ├── thread_action_bar_body.htm # 桌面端打赏按钮

│ ├── thread_action_bar_top.htm # 移动端打赏按钮

│ ├── thread_message_actions_after.htm # 楼层打赏入口

│ ├── thread_plugin_body.htm # 帖子内打赏榜

│ ├── my_sidebar_nav_after.htm # 用户中心侧栏导航

│ ├── my_sidebar_nav_credits_before.htm # 积分侧栏入口

│ ├── header_link_after.htm # CSS 注入

│ └── footer_js_after.htm # JS 注入

├── static/

│ ├── css/laity_tip.css # 插件样式(含暗色模式)

│ └── js/laity_tip.js # 前端 JS(弹窗拉取、事件委托、按钮重排)

└── view/htm/

├── setting.htm # 后台设置页

├── laity_tip_log.htm # 打赏记录列表

├── laity_tip_rank.htm # 排行榜页

├── laity_tip_sent.htm # 发出打赏列表

├── laity_tip_received.htm # 收到打赏列表

└── laity_tip_thread_rank.htm # 帖子内打赏榜组件

技术实现

Hook 注入点

  • thread_action_bar_body.htm / thread_action_bar_top.htm:在帖子底部互动区注入打赏按钮(桌面端 / 移动端)

  • thread_message_actions_after.htm:在楼层操作区注入打赏入口

  • thread_plugin_body.htm:在帖子页嵌入打赏榜卡片

  • header_link_after.htm:在前台 <head> 中注入 CSS 样式表

  • footer_js_after.htm:在前台底部注入前端 JS 逻辑

  • model_inc_file.php:注册 Service 类和缓存 key

  • model_route_table_end.php:注册前台和后台路由

  • model_thread_delete_end.php / model_post_delete_end.php:删帖/删楼时清理关联打赏记录

  • my_sidebar_nav_after.htm / my_sidebar_nav_credits_before.htm:用户中心侧栏导航入口

主题适配

CSS 通过 @media (prefers-color-scheme: dark) 覆盖以下元素实现暗色模式:

  • 打赏榜卡片背景、边框

  • 头像边框

  • 硬币图标颜色

  • 按钮默认颜色

  • 用户/留言列分隔线

数据表


CREATE TABLE laity_tip (

id int(10) unsigned NOT NULL AUTO_INCREMENT,

tid int(10) unsigned NOT NULL DEFAULT 0,

pid int(10) unsigned NOT NULL DEFAULT 0,

from_uid int(10) unsigned NOT NULL DEFAULT 0,

to_uid int(10) unsigned NOT NULL DEFAULT 0,

credits int(10) unsigned NOT NULL DEFAULT 0,

credit_type varchar(32) NOT NULL DEFAULT '',

message varchar(255) NOT NULL DEFAULT '',

status tinyint(1) NOT NULL DEFAULT 1 COMMENT '1=有效 0=已撤销',

create_date int(11) unsigned NOT NULL DEFAULT 0,

PRIMARY KEY (id),

KEY tid (tid),

KEY from_uid (from_uid),

KEY to_uid (to_uid),

KEY status_date (status, create_date)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

卸载

进入后台 → 插件管理 → 找到「打赏插件」→ 点击卸载

卸载会自动删除数据表、清理插件设置和缓存。

兼容性

  • XiunoBBS v1.1.1

  • PHP 7.2+(使用 Throwable 接口)

  • MySQL 5.7+ / MariaDB 10.2+(utf8mb4)

  • 框架 CreditsService(积分扣款/入账)

  • 可选:框架 CacheHelper(查询缓存加速)

打赏v1.0.1.zip 69.4KB
15 金币 请先登录
已有 1 位用户解锁
最新回复
  • 设计狮 内测用户 Lv2
    不错不错
    11天前
    Laity Lv3 作者 回复@设计狮
    感谢支持
    11天前
  • 贰先生 神帝至尊VIP社区元老 管理
    优化一下暗黑模式的适配  ,xiunox使用的是 [data-bs-theme="dark"] 
    11天前
    Laity Lv3 作者 回复@贰先生
    有空我修复一下
    11天前
    Laity Lv3 作者 回复@贰先生
    已优化该问题
    11天前
  • AI Lv1

    @Laity 感谢更新!针对暗黑模式适配,建议直接兼容 prefers-color-scheme[data-bs-theme="dark"] 双条件,以覆盖更多场景。

    例如在 static/css/laity_tip.css 中:

    /* 原有媒体查询 */
    @media (prefers-color-scheme: dark) {
        .laity-tip-card { background: #2d2d2d; }
    }
    
    /* 新增 Bootstrap 5 数据属性选择器 */
    [data-bs-theme="dark"] .laity-tip-card {
        background: #2d2d2d;
    }

    这样无论用户是系统级深色模式还是通过 Bootstrap 切换主题,都能正确渲染。另外,建议在 install.php 中检查 conf.jsonversion 字段,确保后续升级脚本能正确执行幂等迁移。期待看到更完善的交互细节!【以上由 AI 自动回复,仅供参考】

    11天前
  • yaoys 内测用户站长 Lv2
    支持一下
    8天前

请先登录后再回复 登录