惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
小众软件
小众软件
MongoDB | Blog
MongoDB | Blog
Hugging Face - Blog
Hugging Face - Blog
Jina AI
Jina AI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Stack Overflow Blog
Stack Overflow Blog
L
LangChain Blog
大猫的无限游戏
大猫的无限游戏
量子位
A
About on SuperTechFans
G
Google Developers Blog
雷峰网
雷峰网
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
IT之家
IT之家
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园_首页
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Vercel News
Vercel News
V
Visual Studio Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
U
Unit 42
Apple Machine Learning Research
Apple Machine Learning Research

Halo - 强大易用的开源建站工具 | 应用市场

源蝶文档 Hanlo Theme 用户小黑屋 情侣主页 微信公众号同步 互动增强 重要日期 知识库 新野-粗犷主义 站点访问控制 Lottie 动画 展示架 MCP Server 绿野 Luye Log Viewer 超级链接卡片 通知聚合 Akari 深色模式 文章投稿审核 AI RolePlay GitHub 人机验证 心愿便签 Afdian Plus Publica 公共门户 资源下载管理 文章数据趋势分析 归航寻亲 项目展厅
BBS 社区
2026-09-04 · via Halo - 强大易用的开源建站工具 | 应用市场

BBS 社区(plugin-bbs)

Halo 2.x 插件:讨论 + 问答 + 公告 + 两级分类,适合博客站旁的隔离社区。

在线演示:https://blog.timxs.com/bbs(星港社区)

前台列表页:白顶栏 + 品牌色 Hero、左栏分类树、紧凑列表与类型徽标

功能特性

  • 帖子类型:讨论(POST)、问答(QUESTION)、公告(ANNOUNCEMENT,仅管理端可发)。三类帖必须归属分类,与置顶正交
  • 问答:作者与版主可标记「已解决」;改出问答类型时服务端清掉已解决残留
  • 锁定:版主操作——禁评论、禁作者编辑 / 删除。锁定帖不渲染评论组件,历史评论走只读接口(只看不赞)
  • 置顶:独立开关 + 权重。分类页第 1 页浮顶(只在本分类页浮顶,不向父分类传染);所属一级分类开启「置顶帖上首页」时同时出现在首页第 1 页顶部。徽标看 pinnedInView(本视图是否真浮顶),不是 pinned
  • 分类:两级。Iconify 图标(保存时存下选择器输出的离线 SVG,选色已烤进 fill,未选色随文字色)+ 独立分类色(新建按名称预填实色;清空不上色)+ slug + 封面。板块级配置(pinToHomemoderatorRoles)仅一级可设,调和器抹掉子分类上的值
  • 分区版主:一级分类可指定角色;持有该角色者管辖本分类树。全站版主(直接绑定 bbs-moderate / bbs-manage / 超管)不受限。管辖判定不展开角色依赖链
  • 状态:草稿 / 待审核 / 已发布 / 已驳回;软删除进回收站,彻底删除仅管理角色
  • 审核(可选):用户发帖须审核;可配置「编辑已发布是否重新审核」。驳回后重提永远重审。审核中保存只更新内容、不改审核状态(WordPress 式);作者可显式「取消提交」退回草稿;已驳回的帖子既可由作者修改重提,也可由版主直接通过。无需重审时对齐官方文章:标题 / 分类等设置保存即生效,正文仍需显式发布。提交审核可附可选补充说明,审核人在「审核记录」查看(与驳回原因对称)
  • 评论:接入 Halo 官方评论体系。详情页由「评论组件」插件渲染;锁定帖改只读渲染
  • 全文搜索:接入 Halo 搜索,已发布帖子可被站点全局搜索
  • RSS:经 plugin-feed 输出全站 /feed/bbs/posts.xml 与一级分类 /feed/bbs/categories/{slug}.xml(未安装则无 RSS,其余照常)
  • 前台:Flarum 两栏——白顶栏 + 品牌色 Hero、左栏分类树、紧凑列表。圆标(公告 / 置顶 / 未解决问答)+ 线框(已解决 / 锁)。默认按最后活跃排序
  • 作者入口:无独立 /bbs/u 作者页。作者名按「作者链接模板」跳转(默认 /authors/{name});可选接入 interaction-plus(装扮 + 用户卡链接优先)
  • 面向主题:Finder(${bbs})+ 公开 REST API;主题可覆盖 bbs.html / bbs_post.html
  • 安全:正文 HTML 服务端白名单净化;SVG 图标零 URL / 零事件属性;锁帖写入在安全链前拦截

环境要求

  • Halo >= 2.25.0
  • 构建:JDK 21、Node 18+、pnpm
  • 可选:interaction-plus >= 1.0.0(装扮与用户卡链接;未安装时 BBS 照常运行)
  • 可选:PluginFeed >= 1.4.0(RSS;未安装时无订阅源,其余照常)

快速上手

从安装到可用的五步;各项的详细行为见 使用说明。

1. 安装插件

在应用市场搜索「BBS 社区」安装;或从 GitHub Releases 下载 jar,在 Console「插件」页上传安装(自行构建见 构建)。

2. 创建分类(必须先行)

帖子必须归属分类——一个分类都没建时,用户发不了帖。 由「BBS 社区 → 帖子列表」页的「分类」进入分类管理:

  • 两级树,可拖拽排序;封面、Iconify 图标、分类色、slug 均可后续完善
  • 板块级配置(「置顶帖上首页」与「版主角色」)仅一级分类可设

3. 分配角色

  • 普通用户无需配置:发帖权(bbs-uc-post)已聚合给所有登录用户,前台浏览自动公开
  • 版主:手动分配「BBS 社区版主」(bbs-moderate
  • 全功能:分配「BBS 社区管理」(bbs-manage);超管天然拥有
  • 分区版主:自建一个角色(依赖建议勾上 bbs-moderate,已连带后台查看),授予目标用户,再把它写进一级分类的「版主角色」——持有者即管辖该分类树
  • ⚠️ 别把「后台查看」(bbs-view)授给普通用户,否则对方能进管理后台看到草稿 / 待审核 / 回收站

各角色能力见下方 权限模型。

4. 安装评论组件与可选插件

插件 定位 不装的后果
评论组件(plugin-comment-widget) 评论区必需 详情页评论区为空(不影响页面其余部分)
interaction-plus >= 1.0.0 可选 无装扮与用户卡链接,其余照常
PluginFeed >= 1.4.0 可选 无 RSS 订阅源,其余照常

评论的登录 / 审核策略由「系统设置 → 评论」统一控制,评论管理复用 Halo 后台「评论」页。

5. 外观与审核设置

插件设置:

  • 外观 → 品牌:社区标题、Logo、顶栏菜单、主题色;Hero 区与页脚声明也可在此开关
  • 内容 → 审核:是否「用户发帖需审核」(默认提交即发布);开启后再定「编辑已发布是否重新审核」

完成后访问前台 /bbs 验证。

使用说明

Console(后台)

「BBS 社区」菜单(内容分组):

  • 帖子列表:按状态 / 类型 / 分类 / 作者 / 关键词筛选;行内编辑、设置、置顶、锁定、回收,以及发布 / 通过 / 驳回 / 取消提交(纯草稿走「发布」,进过审核的走「通过」;已驳回帖可由作者修改重提,也可版主直接通过;待审核帖可撤回提交;设置弹窗可保存并直接「发布 / 通过」)。分区版主只看见自己管辖的分类
  • 写帖子 / 公告:全屏富文本编辑器;设置里选类型、分类(必选)、置顶与权重、别名、摘要。预览先静默保存再弹窗(桌面 / 平板 / 手机三档视口切换),读工作副本(含未提交修改),未发布也能预览(对齐官方;仅作者本人可见)
  • 分类管理:由帖子列表页「分类」进入。两级树、拖拽排序、封面、板块版主角色

用户中心(UC)

「我的帖子」:登录用户发讨论 / 问答、编辑、删除自己的帖子(发帖必须登录)。用户不能发公告、不能置顶、不能锁定。编辑器首次手动保存、自动保存或 Ctrl/Cmd+S 会创建服务端草稿与 Halo 核心 Snapshot;编辑已发布帖子时,静默保存写入独立 headSnapshot,前台仍读取 releaseSnapshot。只有显式提交才进入审核或发布;已发布修改需审核时,旧发布版本在审核期间继续公开。提交入口三处:编辑器顶部、列表行菜单与设置弹窗(草稿 / 已驳回直接「提交」;已发布帖有未提交修改时「提交修改」;缺分类先弹设置补齐后可就地提交)。待审核期间保存只更新内容、不退出审核队列;想撤回须显式「取消提交」(列表行菜单),退回草稿后可继续编辑重提。编辑器「历史」可查看完整版本、并排对照、恢复、删除及对应审核时间线;「预览」先静默保存再弹窗(三档视口切换),读工作副本,未发布也能看。默认提交即发布;开启「用户发帖需审核」后进入待审核。锁定帖作者不可再编辑或删除。

前台

路径 说明
/bbs 列表。查询参数:category(分类 slug)、q(标题关键词)、pagesortactive | latest | hot,默认 active)、typepost | question | announcement
/bbs/post/{slug} 详情:楼主流 + 评论区 + 相关推荐;桌面右栏目录(正文 h2/h3 ≥ 3)
/feed/bbs/posts.xml 全站 RSS 2.0(需 plugin-feed)
/feed/bbs/categories/{slug}.xml 一级分类树 RSS(需 plugin-feed)

分页:桌面显示页码窗口(首页 / 末页 + 当前页 ±2,空档省略号);窄屏为 n / 总页数 计数,点一下展开同款页码窗口下拉跳页。页码链接完整携带分类 / 搜索 / 排序 / 类型参数。

顶栏可选挂站点菜单:插件设置「外观 → 品牌 → 顶栏菜单」选已有菜单组,留空则顶栏不显示导航。多级菜单一律点击展开(不做悬停展开):桌面点箭头出下拉(子项缩进平铺),窄屏进汉堡、点箭头逐层展开;带链接的父项文字跳转、箭头开合,不带链接的父项整项即开关。兼容 Halo 2.25(menuItems + children)与 2.26(menuName + parent)两种菜单存法及两者混存。

作者名链接(无独立 BBS 作者页):

  1. 插件设置「作者链接模板」(默认 /authors/{name}{name} = 用户名;留空 = 作者名不跳转
  2. 若开启「接入互动增强」,且 interaction-plus 的「用户卡跳转链接」非空 → 优先用对方的模板
  3. 互动增强未安装 / 未就绪 / 模板为空 → 静默回退 BBS 模板,不报错

主题作者页若要展示该用户的 BBS 帖子,使用 Finder:listPostsByOwner / getAuthor(见 主题开发指南)。

评论

  • 前台需安装官方 评论组件(plugin-comment-widget);未安装时评论区为空、不影响页面
  • 登录 / 审核策略由「系统设置 → 评论」统一控制
  • 评论管理复用 Halo 后台「评论」页
  • 锁定帖:模板不渲染 <halo:comment>,历史评论由前台走 GET /posts/{name}/comments 只读渲染。写入被服务端拦截

互动增强(可选)

插件设置 → 集成

说明
接入互动增强 需已安装并启用 interaction-plus。开启后:① 前台装扮(头像框 / 称号 / 勋章 / 悬浮名片);② 作者名链接优先用其「用户卡跳转链接」。关闭则不加载装扮,作者名仅用下方模板
列表页用户装扮 需已开启上方开关。在 /bbs 列表显示头像框、昵称样式与身份标识;关闭则列表纯净显示且不加载装扮脚本,详情页与评论区装扮不受影响。默认关闭
作者链接模板 兜底跳转,默认 /authors/{name};留空表示作者名不可点

列表页昵称不渲染完整身份行(密度),仅昵称样式 + 最高优先级身份标识;详情楼主仍可用完整身份行。发帖数可通过扩展点贡献到 interaction-plus 名片统计(插件在 classpath 时自动注册)。

插件设置

分组 内容
外观 品牌(标题 / Logo / 顶栏菜单 / 副标题 / 标题分隔符 / 主题色)、Hero(显示开关 / 纯色 / Banner)、页脚声明
浏览 每页条数、列表摘要、时间格式(默认相对)、相关推荐、目录、RSS 条目数
内容 标题最大长度、用户发帖需审核、编辑已发布是否重新审核
集成 接入互动增强、列表页用户装扮、作者链接模板

审核通过 / 驳回走 Halo 官方通知中心:作者在 UC 通知列表收到站内消息(可按偏好开邮件)。作者审核自己的帖子不发。事件类型「我的帖子通过审核 / 未通过审核」会出现在用户通知偏好里。

页脚:声明文案(可清空隐藏)+ © {年} {站点名}(站点名来自 Halo 系统设置,链到博客首页)+ Powered by bbs(GitHub)。

权限模型(角色模板)

角色模板 说明 默认授予
BBS 社区后台查看 (bbs-view) Console 只读(列表已按管辖过滤)。不是前台浏览权 需手动分配
BBS 社区版主 (bbs-moderate) 帖子审核(通过 / 驳回 / 撤回提交)/ 锁定 / 置顶 / 已解决 / 回收;不含彻底删除、分类管理、插件设置 需手动分配;也可只作分区版主角色的依赖
BBS 社区管理 (bbs-manage) 版主能力 + 分类 + 彻底删除 + 全部管理接口 需手动分配(超管天然拥有)
BBS 社区发帖 (bbs-uc-post) 用户中心管理自己的帖子 聚合到所有登录用户
公开读 (bbs-public-read) 前台读取已发布内容与只读评论 聚合到匿名 + 登录用户(隐藏)

前台浏览由 bbs-public-read 自动聚合,不必把 bbs-view 授给普通用户——否则对方能进管理后台看到草稿 / 待审核 / 回收站。

如不希望所有注册用户都能发帖,删除 roleTemplate.yamlbbs-uc-post
rbac.authorization.halo.run/aggregate-to-authenticated 标签后重新构建,再手动分配该角色。

面向主题开发者

主题可覆盖 bbs.html / bbs_post.html,经 Finder(${bbs})与匿名公开 REST API 聚合社区数据;约定「忽略未知字段、接口只增不改」。模板覆盖、Finder 方法全表、REST 端点与数据模型见 主题开发指南

构建

./gradlew build

产物在 build/libs/plugin-bbs-*.jar,在 Console「插件」页上传安装即可。

前端单独调试:

cd ui
pnpm install
pnpm dev          # watch 构建
pnpm type-check   # vue-tsc 类型检查

发布自动发帖(可选)

面向在 GitHub 上托管本项目、以 GitHub Releases 发版的维护者;不在此场景可忽略本节。

仓库自带工作流 .github/workflows/bbs-post.yaml:发布 release 时,自动把发布说明发到你自己的 BBS 社区(调 Console API 建帖,正文由 release notes 转 HTML),版本公告不用再手工发一遍。未配置时它不会做任何事;确定不需要可直接删除该文件,不影响插件本身。

配置

仓库 Settings → Secrets and variables → Actions

配置项 类型 说明
BBS_POST_PAT Secret 本插件所在站点的个人访问令牌,持牌账号需有「BBS 社区版主」(bbs-moderate)及以上角色。与官方 CD 上传应用市场用的 halo-pat(halo.run 官方站凭据)是两回事,勿混用
HALO_BASE_URL Variable 站点地址(如 https://example.com),须可被 GitHub 公网访问
BBS_CATEGORY_NAME Variable 目标分类的 metadata.name(形如 category-xxxxxxxx
BBS_PROJECT_NAME Variable(可选) 标题前缀,按原样拼接(格式自己写,如 [BBS 社区]、`BBS 社区

metadata.name 是分类的资源主键,既不是中文名也不是 slug——中文名是 displayName,前台链接别名是 slug。分类查询接口匿名可读,浏览器直接打开即可:

https://你的站点/apis/api.bbs.timxs.com/v1alpha1/categories

返回为 JSON 数组(无 items 包裹),仅含启用中的分类,priority 升序;其中 name 即分类的 metadata.namedisplayName / slug 为其中文名与链接别名。

发帖行为:

  • 状态:正式 release → 直接发布;预发布(prerelease)→ 存草稿;手动运行(Actions → 同步 BBS 公告 → Run workflow)可覆盖
  • 不重复发帖:帖子别名固定为 release-<tag>(如 v1.2.3release-v123)。删了 release 重发、手动重跑都只更新已有帖;回收站内的帖视为不存在,会新建
  • 内容:标题默认 <tag> 发布说明tag 来自 git tag,不是 GitHub Release 标题);配了 BBS_PROJECT_NAME 则按原样作为前缀拼成 {前缀} {tag} 发布说明。正文前后自动拼 release 页面链接与附件下载列表(会等待 CD 上传完 jar,超时则降级为不带下载链接)

鸣谢

  • 感谢 Jevon 提供的 token 支持

交流反馈

交流群

License

GPL-3.0