传统多级层级与扁平话语层级对比

我正在努力说服我们的组织不要退回到传统的论坛模式,那种模式允许多层级的分类,往往会导致点击即跑式的折磨,详见 是时候谈谈标签了

我需要一些论据,证明仅通过标签即可轻松实现目标,而无需在搜索框中输入任何内容。

如果以下问题能得到解答,那就太好了。

我们有一个本地节点支持者网络,将遍布全球,类似于 https://discuss.okfn.org 上的“本地小组”分类。在那里,所有地点都由子分类覆盖。如果不需要深入到城市级别,那确实是正确的解决方案;但我们必须做到这一点。

我构想的结构如下:

  1. 分类:本地节点
  2. 标签:大洲(需要讨论是否有必要)
  3. 子分类:国家(国家应得到充分展示,因此大洲作为标签)
  4. 标签:城市

是否有可能仅通过标签进行导航,利用标签组的层级结构?例如:

  1. 从亚洲点击到日本
    1. 大洲
    2. 国家
  2. 从欧洲点击到罗马
    1. 大洲
    2. 国家
    3. 城市

我尚未找到通过导航栏实现这一功能的方法,也未找到让主题自动根据其子分类名称及其父分类名称进行标记的方法。

我了解以下链接:

此外(作为起步阶段 :slight_smile:):

  1. 如何设置/何时显示“搜索”功能中的标签搜索?

  2. 将标签搜索集成到分类搜索中(我知道右上角有一个搜索框,但它同时列出主题)

最后,我希望在“本地节点”分类中展示一张世界地图,允许用户放大到感兴趣的地点。

我希望可以利用 Locations Plugin 🌍 中看到的地图插件、数据探索器插件 Discourse Data Explorer 以及 自定义布局插件,或许将其集成到 Discourse 分类横幅 中。

目前我只了解到:

它应该看起来大致像这样:

我稍微思考了一下这个问题。我之前尝试过三层分类系统和不同的基于标签的导航系统。

分类:本地节点
标签:大洲(需要讨论是否有意义)
子分类:国家(国家需要良好的可视化呈现,因此大洲作为标签)
标签:城市

我认为,你本质上需要一个特定于 tag_group 的标签下拉菜单,而 tag_group 由分类上下文决定(以便为不同的国家子分类容纳不同的城市组)。

关于在主题列表之外的地方或在帖子中嵌入地图,Locations 插件提供了一个组件化的地图,可以插入到分类页面中。

你可以在主题组件中实现这两种功能。如果你需要构建这样一个组件的帮助,我可以给你一些建议,让你尝试自己完成;或者你也可以聘请 Pavilion 来为你完成。

非常感谢你们的积极反馈!除了地图功能外,其他内容我们都可以自己完成 :smiley:,但我们需要编写一些代码来按照我们的喜好定制主题。

为了对实现这一目标的时间表有个大致了解,能否请您确认、修正、补充或回答以下问题:

  1. :question: 确保我们可以创建无限数量的标签下拉菜单(仅受页面大小限制),并支持根据上一个下拉菜单的选择来筛选标签。
    @angus,您能否从原则上确认这是否可行?
  2. :question: 能否将类别搜索和标签搜索合并,正如第三个列表中的第 2 点所请求的那样?
  3. :factory: 建立与主帖(OP)中所示相当的标签层级结构。这是最基础的部分,如果没有这一点,这个项目注定失败。
  4. :factory: 引入自动标签功能。
    1. :question: :arrow_forward: :factory: 这是否只能像 主题自动标签 中所指出的那样,通过插件来实现?
      :arrow_right: 参见 标签:类别限制、标签组、关系
  5. :factory: 实现增强的 Locations Plugin 🌍 - #429 :star_struck:

如果我们走这条路,我肯定会回应这份慷慨的提议。

目前这不太可能,因为我们的社区即将迈出第一步,收入水平会非常低,而且我们是一个非营利组织。

该问题已在 Set up structured tagging with tag groups and category tag restrictions 中解答。

原则上,一切皆有可能。

例如,我之前曾构建过一个三级分类层级结构,该结构还支持在分类层级上进行多标签交集。

支持多标签交集的三级分类层级路由结构
scope "/multi" do
  constraints(tag_id: /[^\/]+?/, format: /json|rss/) do
     get '/c/:category/t/:tag_id/*tags' => 'tags#show', as: 'tags_category_show'
     get '/c/:parent_category/:category/t/:tag_id/*tags' => 'tags#show', as: 'tags_parent_category_category_show'
     get '/c/:grandparent_category/:parent_category/:category/t/:tag_id/*tags' => 'tags#show', as: 'tags_grandparent_category_category_show'

     Discourse.filters.each do |filter|
       get "/c/:category/t/:tag_id/*tags/l/#{filter}" => "tags#show_#{filter}", as: "tags_category_show_#{filter}"
       get "/c/:parent_category/:category/t/:tag_id/*tags/l/#{filter}" => "tags#show_#{filter}", as: "tags_parent_category_category_show_#{filter}"
       get "/c/:grandparent_category/:parent_category/:category/t/:tag_id/*tags/l/#{filter}" => "tags#show_#{filter}", as: "tags_grandparent_category_category_show_#{filter}"
     end
   end
end

这比您想要实现的功能更复杂,但除非您愿意投入大量时间或资源来维护它,否则这种方案难以持续。一旦标准 Discourse 发生更新,它很可能会失效。

基于上述背景,关于标准 Discourse 中的分类与标签路由结构,有两点需要理解:

  1. 多标签交集仅能在站点范围内实现,无法在分类层级实现。也就是说,标准 Discourse 中没有现成的路由来展示“特定分类下且带有多个特定标签”的主题列表。如果您需要此功能,必须自行添加相应路由。

  2. 分类之间的交集无法实现。也就是说,Discourse 中没有路由可以展示来自同一层级的两个分类(例如两个父分类或两个子分类)的主题。

您仍然可以在不大幅修改服务器端代码的情况下实现四级层级系统(这似乎正是您的目标)。

例如,您可以完全使用标签来表示这四个层级。https://thepavilion.io/tags/intersection/events/bug/to-do/high 即表示 Pavilion 上“events”、“bug”、“to-do”和“high”这些标签的交集。您可以设置四个下拉菜单,分别对应这些标签所属的四个标签组,例如:

[插件] [类型] [状态] [重要性]

一旦您确定了如何在现有 Discourse 路由结构中构建您的层级体系,其余您列出的功能就只是客户端的修改,实现起来(相对) straightforward。

  1. 三级分类层级

    有示例吗?我不清楚它具体长什么样,也不确定代码应该加在哪里。
    grandparent_category 是在哪里以及如何引入的?因为通过用户界面(UX)并没有默认工具来实现这一功能。
    这是否与 Pavilion 有关?应该没关系吧?上面的代码应该会改变分类落地页,对吧?

  2. 多标签交集听起来不错,尽管它们

    那可能意味着需要跳过分类作为主导航路由,转而基于标签构建自定义落地页,这正是我在 Display tags by tag group - #22 by PackElend 中询问的内容。
    这需要自定义主题,对吗?

  3. 仅使用标签

    没错,这就是我们起步的构想,其他内容可以在后续阶段调整。
    只要确保正确打标签,任何事情都是可行的,这取决于时间和我们的耐心(笑),对吧?
    层级结构如下:

    1. 层级:本地节点
    2. 层级:大洲
    3. 层级:国家
    4. 层级:城市

    起初,我们将仅正确使用本地节点作为分类,并为每个城市设立一个子分类。一旦节点数量过多,我们将切换为本地节点国家*层级,同时希望我们最终能开发自己的主题,让基于标签的导航更具吸引力(例如,像第 2 点中提到的那样,让标签的显示框与分类的显示框保持一致)。
    此外,我希望我们能顺利推进我即将提出的功能请求,该请求在 Locations Plugin 中讨论过,因为它可以在许多分类/标签组中使用 :angel:

    最关键的是,我们要尽快实现 话题自动标签 功能,否则在大规模使用前我们就会陷入混乱。
    此外,我们需要在导航栏中引入额外的下拉框,这些下拉框的内容会根据选择动态填充标签。我希望将子分类与基于标签定义的下拉框混合使用不是什么大问题。
    实现类似下方布局的功能是否简单?

    1. 低节点数量布局
      image
    2. 高节点数量布局
      image
  4. 合并显示框
    最后但同样重要的是,这可能会有帮助,你能合并像这样的显示框吗:

image

这行不通,因为它违反了我之前提到的一项限制。

你无法在某个分类内同时按两个标签进行筛选。

image

我不太确定,但我觉得你可能假设:如果你处于“本地节点”分类并按“大洲”筛选,那么你也可以同时按“国家”和“城市”进行筛选。这同样行不通。

我认为这是你最明智的选择。

仅将本地节点作为分类,并为每个城市设立一个子分类

我觉得你试图将过多的未来规划纳入当前的需求中。

一旦节点数量过多,我们将切换为本地节点国家

我理解你希望现在就搭建好正确的“结构”的愿望,但无论你的服务有多好,要真正遇到这个问题还需要很长时间,也就是数年之后。到那时,你运营社区所依据的假设可能已经发生了变化。

此外,你将面临的问题主要将是组织问题,而非层级结构问题。例如,如果你愿意,完全可以在修改后的导航栏中按国家来分组城市子分类。如果你希望进行“国家级”的讨论(尽管不确定这是否合理),也可以专门设立一个子分类来实现。

你的讨论论坛并不需要一个与讨论所围绕的地区的行政层级严格对应的层级结构。你需要的是一个能让用户轻松找到与其相关的内容的层级结构。我理解你将这两个概念联系在了一起,但我不确定这种联系是否合理。过分关注这种联系只会让你的论坛结构思考变得过于复杂。

基本上,我认为你过于投入于从宏观视角(即“万英尺高空视角”)出发,试图让结构与你理想中服务未来大规模运营的状态(例如需要按国家甚至大洲来划分城市)保持一致。而当你真正达到那个阶段时,整个决策的性质将会完全不同。

你说得对,是我的失误,昨晚我在细节中迷失了方向。

[1] 难道不能添加额外的下拉框吗?
那样可以模拟“高级搜索”功能。

同意。我正试图将古老的、深度结构化的思维方式与 Discourse 的方法结合起来。

但正如你所说,

我不确定是否只会存在

因为我们的重点是地理范围非常狭小的项目。当然,某些话题具有国家或全球意义。如何对此进行管理、将其置于正确的语境中、并在 Discourse 的合适位置展示,这确实是一个需要“在实践中学习”的领域。

如果我们决定仅依赖标签,你的 标签交集 方法可能会大有帮助。
在迈出这一步之前,我们需要自定义 标签交集 落地页,使其外观与 分类 落地页大致相同,这可行吗?
我设想让 https://se23.life/tags 的布局采用填充了“子标签”的方框,正如 Higher level of granularity for category & subcategory styling - #7 by PackElend 中所暗示的那样(不过在那里我请求改进子分类的方框样式)。
此外,一旦点击方框或方框内的标签,就会触发查询 https://thepavilion.io/tags/intersection/tag1/tag2/tag3/...。结果将以与方框样式(或我们认为合适的任何样式)相同的方式呈现。

如你所见,我仍然陷入多级路径的考量中,因为这与从全球尺度缩放到本地尺度的类比是一致的。对于任何新用户来说,这都是到达其本地节点最自然的导航路径。
我希望你被证明是正确的,正如

但可能会有一些担忧,即某个层级会因标签过多而变得臃肿。例如,将美国或中国的所有城市分别作为“中国”和“美国”子分类,可能会变得混乱。

同意,尽管我可能

:grin:。这句话有助于淡化对深层方法的过度情感投入。

你能更详细地解释一下吗?或者有没有现成的例子?
这种导航栏的自定义是否与我在这篇帖子开头标记为 [1] 的问题相同?

我制作了一些原型图来可视化可能的路线图,其前提是“国家”和“城市”层级无法并排共存,因此将两者都设为“本地节点”的子分类。

  1. 落地页为分类

  2. 落地页为分类,但本地节点如雨后春笋般涌现

  3. 落地页为标签,自定义主题使分类呈现类似布局