引入嵌套回复功能

有意义的对话发生在房间里每个人都听到彼此想法的时候,而在 Discourse 上,扁平、线性的时间线一直是实现这一点的最佳方式。但扁平结构并不适合所有社区。在规模更大、节奏更快的论坛中,单个时间线上成千上万条回复会让任何人难以跟上。因此,我们今年一直在谨慎地试验完全嵌套的回复视图,并认为它非常适合那些已经超出扁平格式承载能力的社区。

这一功能最初作为一个实验性插件启动,现已转变为直接集成在 Discourse 中的项目。以下是目前嵌套主题的样子:

当某个特定帖子被链接(来自分享链接或通知)时,我们会显示单线程视图:

在您的站点上启用该功能

启用此功能的站点设置可在管理界面中找到。导航至“嵌套回复”部分,以控制该功能、默认排序模式、最大嵌套深度等选项。

路线图

截至撰写本文时,嵌套回复仍处于早期阶段,路线图尚未完全明确。我们已知将推进以下几项工作:

  • 改善移动端体验

  • 重新思考嵌套视图下的主题时间线。目前,在嵌套回复模式下,主题没有时间线显示

  • 至少新增一种帖子排序模式,支持按时间衰减排序,类似于主题列表中的“热门”排序

限制

  • 当为某个分类启用嵌套功能时,已存在的主题仍保持扁平模式。每个主题均可通过管理员扳手单独切换,但目前尚无方法将整个现有分类转换为嵌套模式。

我们期待您的反馈

我们需要您的反馈以及使用该功能的实际体验,以帮助指导其开发。如果这看起来适合您的社区,不妨尝试一下,并告诉我们您和您的用户有何看法!

28 个赞

OMG 太棒了!时机也刚刚好。今晚我要把论坛迁移到带有两个容器的新服务器上,几周后常规赛和我们的体育竞猜池就要开始了,我迫不及待想把这个切换到新版本。这也将是一个很好的测试用例。

拥有平铺式和嵌入式讨论的选项真是太酷了——感谢 @markvanlan 和团队。

看看会出什么乱子也会很有趣:laughing

12 个赞

需要说明的是:当树的多个分支中出现新回复时,单线程视图似乎一次只显示一条。我不得不多次返回查看,未读数量每次减少一个。

尽管 Discourse 已更新,我仍然找不到启用此功能的选项!

我是自行托管的,也许这就是原因::sweat_smile:

请更新您的 Discourse 实例,然后进入所有站点设置并搜索“嵌套”。

您可以在创建新主题时通过主题管理扳手来切换该选项。

如果您希望其在某个分类中默认为启用状态,可以在分类设置标签页中进行启用。

我自托管并且它完全正常运行。

8 个赞

感谢你的高效:+1:

1 个赞

能否通过“选择帖子 > 批量操作”选项对现有主题进行批量更改或更新?

或者是否有通过 Rails 控制台批量更新所有现有主题的选项?

1 个赞

是的,切换是批量操作的一个选项 :slight_smile:

2 个赞

好的,不确定批量切换功能对于拥有数万条主题的分类是否可行。是否可以考虑使用 Rails 的批量/批处理转换任务?:thinking:

另外,这个操作可逆吗?能否将线程化主题重新转换为扁平主题?

2 个赞

是的,我同意你的看法。这目前是一个限制,我们一定会继续思考这个问题。

我之所以选择在启用该功能时不转换类别中的历史主题,主要原因是用户的交互方式可能会有所不同。在扁平模式下,各种 <kbd>回复</kbd> 按钮的重要性降低了。帖子会出现在主题底部。我不确定用户是否总是有意点击“正确的那个”,以便在嵌套视图中正确显示。

基本上,我担心管理员会为历史主题启用该功能,随后导致对话变得难以阅读。我们会继续思考这个问题。我能想到的最简单的改进是:当切换类别设置时,弹出一个模态对话框,询问“是否将此设置应用到现有主题?”

4 个赞

太棒了!很高兴看到这个!:clap:

2 个赞

我一直觉得“回复”标签可以更加具体——所以 不久前 我使用了一些自定义 CSS 来添加上下文:

截图

CSS
/* 为主题原始帖子(即主题本身)的回复按钮添加文本 */
#post_1 nav.post-controls {
  .actions {
    button.reply {
      span.d-button-label:after {
        // 在“回复”后添加此内容
        content: " 回复此主题";
      }
    }
  }
}

/* 为所有后续帖子(我称之为评论)的回复按钮添加文本 */
nav.post-controls {
  .actions {
    button.reply {
      span.d-button-label:after {
        // 在“回复”后添加此内容
        content: " 回复此评论";
      }
    }
  }
}

/* 为页面底部出现的蓝色“回复(主题)”按钮添加文本 */
#topic-footer-buttons {
  .topic-footer-main-buttons {
    button.btn-primary.create {
      span.d-button-label:after {
        // 在“回复”后添加此内容
        content: " 回复主主题";
      }
    }
  }
}
1 个赞

此方案的问题在于,对于偏好设置中语言为非英语的成员,其用户界面将不会进行翻译。

1 个赞

有意思……

这是否意味着我们应该先在社区中进行隔离测试,然后再决定对所有现有主题进行转换?:thinking:

这确实可行,前提是该功能能够支持数万个主题。

但必须非常明确地告知用户,此操作不可逆转 :sweat_smile:


该功能会先在 meta 上实施,还是在 https://try.discourse.org 上实施,以便我们在非生产环境中进行测试?

1 个赞

如果是我自己的社区,我会先进行隔离测试。另一方面,如果您为整个社区启用该功能,我们也能更快地获得更有价值的反馈 :wink: 。玩笑归玩笑,我认为隔离测试可能是明智之举,但这里并没有破坏性的数据迁移。该功能可以安全地启用和禁用。您在此做出的任何决定都不会将您锁定在任一方向上。

我想我有点无意中回答了这部分!启用嵌套功能只是为数据库中的每个主题创建一个 nested_topic 记录,并启动一个任务来计算祖先树中的回复数量。禁用嵌套则会移除该 nested_topic 记录,您会回到扁平结构,没有任何问题。

欢迎在此类别中随意尝试:

1 个赞