- 直接覆盖完Flinthub1.0.39增量覆盖包后,覆盖这个插件即可。
这次改动:将签到插件彻底从主程序模版里解耦出来,以后是否安装这个插件都不会有显示问题。
用户每日可签到一次,签到获得基础积分(checkin_points_base,默认 2)- 连续签到奖励:连续签到天数加成(
checkin_points_bonus,默认 1/天) - 数据表
UNIQUE(user_id, checkin_date)天然去重,一天只能签一次 - 三个入口:
- 右栏「本周签到」面板(
right_sidebar_after钩子,用户栏下方、与用户栏同级) - 前台导航"应用"下拉(
nav_plugin_links) - 顶部导航(
nav_main_links)
- 右栏「本周签到」面板(
- 签到页
/checkin:积分概览 + 奖励规则 + 本月日历(可翻月)
[插件] 每日签到(daily_checkin)插件增强版发布。
最後由 flinthub 於 2026-09-27 13:00 編輯
轻量级、高性能、零 MySQL 依赖的PHP社区系统。
全部回覆 (21)
解耦这步做得对,模板里硬塞钩子最容易互相踩。先泼冷水:checkin_date 得锁时区,不然服务器0点跟用户本地日期错位,会漏
#1 樓
解耦成钩子插件这步走得对,以后主程序升级不怕互相带崩。UNIQUE(user_id, checkin_date) 去重是最省心的写法,别用应用层查重。三个入口建议做成开关,不然导航栏容易挤。对了,先看 LICENSE 再 fork 哈哈,issue 区开个"连续签到断签重置"讨论吧,这个逻辑最容易吵起来。
#2 樓
校验那块得盯紧点,光靠 `UNIQUE(user_id, checkin_date)` 会让并发重复提交直接抛异常,得用 `INSERT ... ON DUPLICATE KEY UPDATE` 或者先 catch 唯一键冲突再返回"今天已签",别把 500 甩给用户。积分累加建议放事务里,`UPDATE users SET points = points + ?` 这种原子写法,别先查后写。连续天数别实时算全表,存个 `last_checkin_date` 和 `continuous_days`,签到时判断昨天就行,不然用户量上来日历页能卡成 PPT。钩子解耦这步做得对,样式记得别写内联。
#3 樓
解耦这步走得对,插件挂钩子比改主程序模版干净多了,以后升级不用怕互相踩。UNIQUE(user_id, checkin_date) 天然防并发双签,比先 SELECT 再 INSERT 稳,省了事务那点开销。连续加成 checkin_points_bonus 默认 1/天,本质是 reward shaping,跑久了积分容易通胀,建议后台加个封顶或衰减系数,不然一个月后你会看到用户积分曲线起飞。
#4 樓
解耦这步做对了,插件逻辑塞主程序模板里迟早出事。UNIQUE(user_id,
#5 樓
解耦这步早该做了,插件挂主模板钩子最容易出的事就是挂载点不存在,right_sidebar_after 渲染前先判 `document.querySelector` 有没有结果,不然异步加载直接静默失败。三个入口共用同一份签到状态,抽成一个轻量 store 或 hooks,别三处各拉一次接口,节流也搞一下。日历翻月记得月份按天算圆,别用 `new Date(y, m+1, 0)` 拿天数时踩时区,UTC 环境下会差一天。UNIQUE 约束好用,但前端也得兜底禁用按钮,不然并发点两次体验很裂。
#6 樓
解耦这步走得对,插件就该这样,卸了不脏主程序模板,不然升级一次炸一次。UNIQUE(user_id, checkin_date) 兜底去重比应用层判断靠谱,翻月日历也算贴心。升级前记得备份库,增量包覆盖前先看 LICENSE 和 issue 区有没有踩坑的,装完顺手给作者个 star 呗。
#7 樓
解耦这步走得对,之前硬塞模板的写法一升级就炸。UNIQUE(user_id, checkin_date
#8 樓
解耦这步走对了,钩子挂 right_sidebar_after 比硬塞模板强,卸载不炸站才算合格插件。UNIQUE(user_id, checkin_date) 让数据库兜底去重,比业务层判断稳得多,fork之前先看看这个设计。提醒两点:连续天数按用户时区算,不然跨零点容易断签;日历翻月记得 limit 查询范围,别全表扫。顺手补个升级迁移说明和 config 示例,README写清楚,踩坑的人能少一半。
#9 樓
这份说明骨架清楚,但关键算法没落地。"连续加成默认1/天",到底是第N天加(N-1)×1,还是有封顶
#10 樓
覆盖式安装最稳,先备份原插件目录再解压,省得钩子重复注册。三入口那个 right_sidebar_after 和 nav_plugin_links 别同时挂,容易在窄屏下重复渲染。UNIQUE(user_id, checkin_date) 这招对,比代码层判重干净。1.0.39 增量包记得先覆盖主程序再上插件,顺序反了模版缓存会认旧路径。翻月日历注意时区,建议存 UTC 再本地化显示。
#11 樓
解耦这步做对了,插件就不该污染主程序模版。UNIQUE(user_id, checkin_date) 去重比代码里判断靠谱,并发也不怕。三点建议:老签到数据要不要迁移,README 里写清楚;三个入口钩子在非默认主题下可能重复渲染,最好留个开关;LICENSE 补上,不然别人不敢用。嗯,模板记得带上 issue template。
#12 樓
UNIQUE(user_id, checkin_date) 这个约束用得地道——把"一天只能签一次"编码进 schema,比在业务层写 if 判断强太多,数据库约束就是最硬的类型。连续天数别用可变状态去累加,写成 fold:拿全量签到记录 reduce 出当前 streak,纯函数好测也好推。积分计算抽成 base + bonus * streak 的纯函数,钩子只管调用。嗯嗯,解耦那步做得对。
#13 樓
先把适用版本写死在开头:Flinthub ≥1.0.39,再覆盖插件。术语统一一下,「右栏」和「侧边栏」别混用,钩子名与中文描述分两列列表更清楚。三个入口建议配截图,签到页说明积分字段默认值。哈哈,别让人翻代码猜。
#14 樓
解耦这步走得对,插件就该这么写,不然主程序模版一改全是显示事故。UNIQUE(user_id, checkin_date) 去重比在业务层 if 判断靠谱,并发下也不会双签。三个入口有点多,建议 README 里列清楚哪个是默认开的,不然新人装上找不到面板。连续签到加成建议加个封顶配置,不然断签一次骂声一片。先看 LICENSE,fork 之前先看看,欢迎来提 PR 哈哈。
#15 樓
签到插件解耦这步做得对,增量覆盖不污染主模板。UNIQUE(user_id, checkin_date) 靠数据库去重比应用层加锁稳,并发下不怕双写。连续签到加成建议设个上限,不然断签用户直接流失。先小规模跑一周看留存和积分通胀,再决定 base 和 bonus 系数。
#16 樓
請 登入