精华 XIUNO BBS X版 更新记录贴 20260616

新增功能

1. 评论用户名后显示用户组

  • 一级评论和二级回复的用户名后均显示用户组 badge(bg-primary bg-opacity-10 text-primary 样式)

  • 帖子详情页标题下方的用户名后也显示用户组 badge

  • post_format() 新增 group_name 字段,从用户缓存中读取用户组名称

  • thread_format() 新增 group_name 字段

2. 管理员后台编辑用户增加字段

  • 头像:显示当前头像预览 + 重置为默认头像复选框

  • 积分:可编辑 credits、golds、rmbs 三个积分字段

  • 个性签名:可编辑 signature 字段(兼容数据库无此字段的情况)

  • 修改文件:admin/route/user.phpadmin/view/htm/user_update.htm

3. 帖子详情页管理按钮增加审核功能

  • 正文下方管理按钮区域新增"审核通过"按钮(绿色,仅待审/已驳回帖子显示)

  • 新增 mod-audit 路由,支持审核通过和审核驳回两种操作

  • 新增 view/htm/mod_audit.htm 模板,提供通过/驳回单选

  • 使用 AuditService::approve() / AuditService::reject() 处理审核逻辑

  • 新增语言键:audit_approveaudit_reject

Bug 修复

4. 修复标题下方删除按钮无效

  • 标题下方的删除按钮缺少 data-confirm-text 属性和 _confirm class,导致点击无反应

  • 添加 data-confirm-text_confirm class

  • bbs.js 中新增 a._confirm 事件委托(使用 $(document).on 动态绑定),支持确认弹窗 + POST 删除

新增功能(第二批)

5. 固定链接设置页面添加 Nginx 404 配置说明

  • 后台固定链接设置页面的 Nginx 伪静态规则中增加 error_page 404 =404 /index.php;

  • 解决宝塔面板 Nginx 默认拦截 404 响应导致自定义 404 页面不显示的问题

6. 编辑器增加引用帖子功能

  • AIEditor 工具栏新增引用帖子按钮(书本图标)

  • 点击后弹出搜索弹窗,输入关键词搜索帖子

  • 选择帖子后自动插入引用链接,包含原帖标题和跳转链接

  • 搜索 API 复用 route/search.php,新增 ref_suggest 参数返回 JSON 格式结果

  • 新增语言键:ref_thread_tip

7. 评论置顶功能

  • 数据库 bbs_post 表新增 is_top 字段(TINYINT,默认0)

  • 新增 mod-top_post 路由,管理员和帖子作者可置顶/取消置顶评论

  • 置顶评论优先展示(usort 排序),并显示绿色"置顶"标识

  • 评论列表中显示置顶/取消置顶按钮

  • 新增语言键:post_top_successpost_untop_successpost_top_labeluntop

  • 数据库升级脚本已添加 is_top 字段的 ALTER TABLE

8. 帖子状态扩展 hook 点

  • thread.htm 新增两个 hook 点:

    • thread_status_alert_after.htm:帖子状态提示之后

    • thread_subject_badge_after.htm:标题 badge 之后

  • 插件可通过 hook 在帖子状态区域扩展自定义内容

9. 快速评论验证码错误后保留用户输入文本

  • 移除快速评论表单的 this.reset() 自动重置

  • 新增智能重置逻辑:提交成功清空表单,提交失败(验证码错误等)保留用户输入

  • 失败时在表单内显示错误提示信息

10. 评论验证码开关与发帖分开

  • CaptchaService 新增 reply 场景,与 post(发帖)场景独立控制

  • 后台验证码设置页面新增"回帖验证码"开关

  • 后端 route/post.php 回帖验证码改用 CaptchaService::is_enabled('reply')

  • 前端快速评论表单验证码改用 reply 场景

  • 发帖验证码仍使用 post 场景,互不影响

  • 新增语言键:admin_captcha_reply

11. 修复评论置顶后内容变空

  • post_update() 调用 post_message_fmt() 时,仅传 is_top 字段导致 message 被清空

  • 修复:post_message_fmt()$arrmessage 字段时直接跳过

12. 修复删除评论 CSRF token verification failed

  • $.xpost 未携带 CSRF token,后端验证失败

  • 修复:_confirm 事件中获取 CSRF token 并传入 $.xpost,优先使用 XN.csrfToken

13. 引用帖子功能改为右侧高级功能区块

  • 从 AIEditor 工具栏移除引用帖子按钮,改为帖子发布页右侧"高级功能"区块

  • 搜索帖子后点击插入引用链接到编辑器

  • 右侧区块有 post_sidebar_top.htmpost_sidebar_bottom.htm hook 点,插件可扩展

  • AIEditor 实例暴露到 window.aiEditorInstance,供外部调用

14. 修复 emoji 表情变 ? 问题

  • 数据库连接 charset 从 utf8(3字节)改为 utf8mb4(4字节,支持 emoji)

  • UpgradeService 新增 utf8mb4 升级步骤,自动将旧表从 utf8 转换为 utf8mb4

  • adjustConfig() 自动升级 conf.php 中的 charset 配置

  • 注意:已损坏的 emoji(显示为?)无法恢复,新写入的 emoji 将正常显示

15. 快速回复框增加表情输入

  • 快速回复区域新增表情选择器按钮(笑脸图标)

  • 点击弹出常用 emoji 面板,选择后插入到光标位置

  • 点击外部自动关闭面板

16. 合并升级系统

  • 删除 Phase 1 独立升级入口(路由、模板、文件)

  • 所有数据库变更统一到 UpgradeService 一键升级流程

  • 新增 utf8mb4 升级步骤

修改文件清单

  • model/post.func.php — post_format 新增 group_name + post_message_fmt 跳过无 message 字段

  • model/thread.func.php — thread_format 新增 group_name

  • view/htm/post_list.inc.htm — 评论用户名后增加用户组 badge + 置顶标识 + 置顶按钮

  • view/htm/thread.htm — 用户组 badge + 删除按钮修复 + 审核按钮 + hook 点 + 快速评论保留输入 + 验证码场景分离 + 表情选择器

  • admin/route/user.php — 编辑用户增加头像/积分/签名处理

  • admin/view/htm/user_update.htm — 编辑用户表单增加字段

  • route/mod.php — 新增 audit action + top_post action

  • view/htm/mod_audit.htm — 新增审核弹窗模板

  • view/js/bbs.js — _confirm 事件携带 CSRF token + 置顶按钮事件

  • lang/zh-cn/bbs_common.php — 新增语言键

  • lang/zh-cn/bbs_admin.php — 验证码场景标签分离

  • lib/security/CaptchaService.php — 新增 reply 场景

  • admin/view/htm/security_captcha.htm — 新增回帖验证码开关

  • lib/EditorService.php — 移除工具栏引用帖子按钮 + 暴露 aiEditorInstance 到全局

  • route/search.php — 新增 ref_suggest JSON API

  • route/post.php — 回帖验证码改用 reply 场景

  • route/thread.php — 评论列表置顶排序

  • admin/route/setting.php — Nginx 规则增加 404 配置

  • install/install.sql — bbs_post 表新增 is_top 字段

  • lib/UpgradeService.php — 新增 utf8mb4 升级步骤 + adjustConfig 自动升级 charset

  • conf/conf.php — charset 改为 utf8mb4

  • conf/conf.default.php — charset 改为 utf8mb4

  • view/htm/post.htm — 右侧高级功能区块 + 引用帖子搜索

17. 外部 CDN 引用改本地

  • Prism autoloader 语言包路径从 CDN 改为本地 view/vendor/prismjs/components/(下载 41 个常用语言包)

  • QRCode.js 从 CDN 改为本地 view/vendor/qrcodejs/qrcode.min.js

  • 消除外部 CDN 依赖,提升国内访问稳定性

18. 积分扣减操作增加用户提醒

  • 后端CreditsRuleService::applyRule() 余额不足时返回失败(不再静默跳过),新增 checkOnly 模式用于前端预检查

  • 发帖页面:右侧显示积分消耗提示卡片,余额不足时禁用提交按钮,提交时弹窗确认扣减

  • 点赞/收藏:通过 htmx:confirm 事件拦截,扣积分时弹窗确认,余额不足时 toast 提示

  • 后端拦截:发帖/点赞/收藏操作前先检查积分余额,不足则拒绝操作

  • 新增 my-credits_check API,前端查询操作的积分消耗

  • 新增语言键:credits_deduct_titlecredits_deduct_warncredits_deduct_confirm

19. 修复手机端搜索 URL 多了 .htm

  • url('search.htm') 导致 Xiuno 的 url() 函数自动追加 .htm,生成 search.htm.htm

  • 修复:header_nav.inc.htmsearch.htmurl('search.htm') 改为 url('search')

20. 手机端发帖页高级功能区块响应式布局

  • 桌面端:保持右侧并排布局(280px 侧边栏)

  • 手机端:高级功能区块(积分消耗提示 + 引用帖子)移到编辑器下方、验证码上方

  • 使用 row + col-lg 响应式布局替代 d-flex

  • 手机端使用更紧凑的卡片样式(py-2 px-3

  • 引用搜索和积分检查 JS 同时支持桌面端和手机端元素

21. 排行榜固定10条数据,去掉加载更多

  • 排行榜三个 tab(热门帖子/活跃用户/积分排行)均改为固定10条,不分页

  • 去掉"加载更多"按钮和分页参数

  • 修改文件:route/rank.phpview/htm/rank.htm

22. 发帖编辑器自适应高度 + 工具栏吸顶

  • 编辑器高度从固定 450px 改为自适应(min-height: 300px),内容增长时自动变高

  • 工具栏(.aie-header)使用 position: sticky; top: 0 吸顶,长文编辑时无需滚到顶部操作

  • textarea fallback 也改为自适应高度

  • 修改文件:lib/EditorService.phpview/htm/post.htm

23. 发帖版块分类默认空 + 提示文字

  • 多版块时下拉框默认显示「请选择版块」占位符,不预选任何版块

  • 单版块时自动选中唯一版块,无需用户手动选择

  • 下拉框添加 required 属性(多版块时)

  • 新增语言键:please_select_forum

  • 修改文件:view/htm/post.htmlang/zh-cn/bbs_common.php

24. 发帖报错信息移到提交按钮附近

  • #post-msg 从表单顶部移到验证码下方、提交按钮上方

  • 长文发帖时错误信息可见,无需滚动到页面顶部

  • 修改文件:view/htm/post.htm

25. 帖子详情页左侧导航换成帖子目录(如有标题)

  • 自动扫描帖子正文中的 h1-h6 标签生成目录

  • 有2个以上标题时显示目录,隐藏全局导航;否则保持全局导航

  • 目录支持层级缩进、平滑滚动、滚动时高亮当前项(IntersectionObserver)

  • 修改文件:view/htm/thread.htm

26. 昵称与用户名分离

  • 数据库:user 表新增 nickname 字段(VARCHAR(32),唯一索引),新增 nickname_change_log 表记录修改历史

  • 后端

    • 注册时 nickname 默认等于 username

    • user_format() 新增 display_name 字段(nickname 优先,为空时 fallback 到 username)

    • 全站显示统一使用 display_name:帖子/评论/通知/排行榜/在线用户/搜索结果

    • 个人设置页用户名不可修改,改为修改昵称

    • 昵称修改频率限制:每30天最多修改1次

    • 昵称修改时记录日志(旧昵称、新昵称、时间、IP)

    • 昵称全局唯一性检查 + 敏感词检查

    • 后台管理:用户列表增加昵称列,编辑用户增加昵称字段,支持按昵称搜索

    • 搜索用户时同时搜索 username 和 nickname

  • 前端

    • 个人设置页:用户名 disabled 显示 + 昵称可编辑

    • 所有前台显示用户名的地方改为 display_name

    • 后台用户列表增加昵称列和搜索选项

  • UpgradeService:新增 nickname_field 升级步骤(复制 username → nickname + 添加唯一索引)

  • 新增语言键:username_cannot_modifynickname_is_in_usenickname_contains_sensitive_wordnickname_length_too_longnickname_change_too_frequent

  • 修改文件:lib/UpgradeService.phproute/my.phproute/user.phproute/search.phpmodel/user.func.phpmodel/thread.func.phpmodel/post.func.phpmodel/notify.func.phpmodel/notice.func.phpmodel/session.func.phpmodel/user_profile_audit.func.phpservice/RankService.phpview/htm/my.common.template.htmview/htm/my.layout.inc.htmview/htm/header_nav.inc.htmview/htm/sidebar_right.inc.htmview/htm/thread.htmview/htm/user.*.htmadmin/route/user.phpadmin/view/htm/user_list.htmadmin/view/htm/user_update.htmlang/zh-cn/bbs_common.php

27. 积分防刷限制改为每个规则独立设置

  • 数据库credits_rule_globalcredits_rule_forum 表新增 daily_limit 字段(INT,默认0=使用全局设置,-1=不限制)

  • 后端

    • CreditsService::add/sub 新增 $dailyLimit 参数,checkDailyLimit 优先使用规则级限制

    • CreditsRuleService::getRule 返回 daily_limit 字段,applyRule 传递给 add/sub

    • CreditsRuleService::saveGlobalRules/saveForumRules 保存 daily_limit 字段

    • 规则级 daily_limit:0=使用全局设置,-1=不限制,>0=具体次数

  • 前端

    • 后台积分规则页面增加「每日限制」列

    • 版块规则页面增加「每日限制」列和输入框

  • 语言包:新增 admin_credits_daily_limitadmin_credits_daily_limit_default

  • 修改文件:lib/UpgradeService.phplib/CreditsService.phpservice/CreditsRuleService.phpadmin/route/credits_rule.phpadmin/view/htm/credits_rule.htmadmin/view/htm/credits_rule_forum.htmlang/zh-cn/bbs_admin.php

最新回复
  • 暂无回复

请先登录后再回复 登录

uid:1 管理
关注
随遇而安,随缘而行
发帖 39
评论 220
粉丝 9
关注 1
发新帖
目录

扫码手机打开本帖