开发了一个 Flarum 2.0 扩展:回复可见(Reply To See)

最近在搭建 Flarum 论坛时,发现一个很常见的功能需求——回复可见:帖子中的某些内容只有在用户回复后才能查看。这在资源分享、教程社区、会员论坛中非常实用,能有效鼓励用户参与讨论。

然而,现有的类似插件大多年久失修,不支持最新的 Flarum 2.0。于是我决定自己写一个,今天正式发布。


它是什么?

Reply To See 是一个轻量级的 Flarum 扩展,允许你在帖子中隐藏任意内容,用户回复该讨论后才能查看。

安装地址:Packagist 源代码:GitHub


功能特性

1. 简单的 BBCode 标签

[REPLY]...[/REPLY] 包裹你想隐藏的内容就行了:

这段话所有人都能看到。

[REPLY]
这段话需要回复后才能看到。
[/REPLY]

2. 编辑器一键插入

不想手打标签?工具栏上有个按钮,点击即可插入 [REPLY] 标签,选中文字后点按钮还能自动包裹。

3. 灵活的权限控制

不同用户看到的内容不同:

  • 帖子作者:始终能看到自己隐藏的内容

  • 管理员:始终拥有完整访问权限

  • 免回复权限组:可在后台设置特定用户组无需回复即可查看

  • 游客和未回复用户:看到友好的提示信息

4. 服务端过滤,安全可靠

隐藏的内容在服务端就被过滤掉了,不会发送到浏览器。这意味着用户无法通过"查看源代码"或 F12 开发者工具绕过限制。这是纯前端方案做不到的。

5. 跟随主题配色

隐藏区域的样式采用虚线边框设计,颜色自动跟随 Flarum 后台「外观」设置中的主色调。换色不用改代码,论坛是什么风格,它就是什么风格。

6. 多语言支持

内置中英文语言包,开箱即用。


安装方法

一行命令搞定:

bash

复制

composer require treeslins/flarum-ext-reply-to-see

然后在后台启用即可。


后台设置

启用后,在管理面板可以配置:

  • 占位提示文字:自定义未回复用户看到的提示信息

  • 免回复权限:授予特定用户组无需回复即可查看隐藏内容的能力


技术实现简述

开发过程中踩了不少坑,简单记录几个关键点:

  1. s9e TextFormatter 渲染管线:Flarum 使用 s9e TextFormatter 处理文本格式化,它有自己的一套 XML + XSLT 渲染流程。在 render 回调中注入 HTML 会被 XSLT 渲染器吞掉,正确的做法是通过 XSLT 模板条件语法控制渲染输出。

  2. Flarum 2.0 的 Export Registry:Flarum 2.0 的前端模块并非全部暴露给扩展使用,ReplyComposer 就没有注册到 Export Registry 中,直接 extend 会导致 undefined 错误。

  3. CSS 变量:Flarum 2.0 在 :root 中定义了大量 CSS 自定义属性(如 --primary-color--body-bg 等),扩展样式直接引用这些变量就能自动适配亮色/暗色主题。


兼容性

  • Flarum ^2.0

  • MIT 开源协议


如果你觉得有用,欢迎在 GitHub 上点个 Star,也欢迎提 Issue 和 PR 反馈问题或贡献代码。

评论