开发了一个 Flarum 2.0 扩展:回复可见(Reply To See)
最近在搭建 Flarum 论坛时,发现一个很常见的功能需求——回复可见:帖子中的某些内容只有在用户回复后才能查看。这在资源分享、教程社区、会员论坛中非常实用,能有效鼓励用户参与讨论。
然而,现有的类似插件大多年久失修,不支持最新的 Flarum 2.0。于是我决定自己写一个,今天正式发布。
它是什么?
Reply To See 是一个轻量级的 Flarum 扩展,允许你在帖子中隐藏任意内容,用户回复该讨论后才能查看。
功能特性
1. 简单的 BBCode 标签
用 [REPLY]...[/REPLY] 包裹你想隐藏的内容就行了:
这段话所有人都能看到。
[REPLY]
这段话需要回复后才能看到。
[/REPLY]
2. 编辑器一键插入
不想手打标签?工具栏上有个按钮,点击即可插入 [REPLY] 标签,选中文字后点按钮还能自动包裹。
3. 灵活的权限控制
不同用户看到的内容不同:
帖子作者:始终能看到自己隐藏的内容
管理员:始终拥有完整访问权限
免回复权限组:可在后台设置特定用户组无需回复即可查看
游客和未回复用户:看到友好的提示信息
4. 服务端过滤,安全可靠
隐藏的内容在服务端就被过滤掉了,不会发送到浏览器。这意味着用户无法通过"查看源代码"或 F12 开发者工具绕过限制。这是纯前端方案做不到的。
5. 跟随主题配色
隐藏区域的样式采用虚线边框设计,颜色自动跟随 Flarum 后台「外观」设置中的主色调。换色不用改代码,论坛是什么风格,它就是什么风格。
6. 多语言支持
内置中英文语言包,开箱即用。
安装方法
一行命令搞定:
bash
复制
composer require treeslins/flarum-ext-reply-to-see
然后在后台启用即可。
后台设置
启用后,在管理面板可以配置:
占位提示文字:自定义未回复用户看到的提示信息
免回复权限:授予特定用户组无需回复即可查看隐藏内容的能力
技术实现简述
开发过程中踩了不少坑,简单记录几个关键点:
s9e TextFormatter 渲染管线:Flarum 使用 s9e TextFormatter 处理文本格式化,它有自己的一套 XML + XSLT 渲染流程。在 render 回调中注入 HTML 会被 XSLT 渲染器吞掉,正确的做法是通过 XSLT 模板条件语法控制渲染输出。
Flarum 2.0 的 Export Registry:Flarum 2.0 的前端模块并非全部暴露给扩展使用,
ReplyComposer就没有注册到 Export Registry 中,直接extend会导致undefined错误。CSS 变量:Flarum 2.0 在
:root中定义了大量 CSS 自定义属性(如--primary-color、--body-bg等),扩展样式直接引用这些变量就能自动适配亮色/暗色主题。
兼容性
Flarum ^2.0
MIT 开源协议
如果你觉得有用,欢迎在 GitHub 上点个 Star,也欢迎提 Issue 和 PR 反馈问题或贡献代码。
评论