2026-06-25 更新日志
勋章系统 - 版块门控功能
新增版块勋章门控:设置版块所需勋章,用户需拥有任一勋章才能访问(OR 逻辑)
新建 xnx_forum_medal 关联表,插件自建表不改系统结构
后台勋章设置页新增「版块门控」tab,可配置每个版块所需的勋章
拦截点:版块列表页(forum_top_list_before)、帖子详情页(thread_info_start)、回帖(post_get_post)
管理员组(gid=1,2)豁免,帖子作者可查看自己帖子
拦截时显示友好提示页,列出所需勋章并引导用户去勋章墙获取
性能优化:版块-勋章映射请求级缓存,用户勋章ID请求级缓存,避免重复查库
勋章系统优化
合并「我的勋章」页面到勋章墙,统一在三栏布局中展示佩戴/取消佩戴/申请记录
移除左侧栏「我的勋章」导航项和 medals-my 子路由
勋章卡片添加佩戴/取消佩戴按钮,支持 htmx 局部刷新
免费勋章申请前先检查条件是否满足,不满足时显示「条件不足」提示而非申请按钮
勋章卡片添加 is_wearing 标记,已佩戴勋章显示蓝色边框和图标
伪静态切换风险点修复
针对项目当前 url_rewrite_on=4(.html 后缀风格)配置,系统性修复了切换伪静态后可能导致功能失效的风险点。
高风险修复
前端 URL 生成函数全模式支持:
模板相对路径静态资源:
Referer 安全校验兼容 .html 后缀:
中风险修复
跳转 URL 统一通过 url() 生成:
route/mod.php 7 处置顶/加精/关闭/删除/移动等操作的 redirect_url 由 './' 改为 url('index')
xiuno-modern.js 积分检查 fallback URL 改为通过 XN.url() 生成
bbs.js 置顶操作 fallback URL 改为通过 xn.url() 生成
index.inc.php 搜索跳转改为通过 url('search', array(...)) 生成,不再硬编码 search.htm