自定义主题:尽管系统中存在,`categories.json`中仍缺少类别

我们构建了一个自定义的Discourse主题,通过JavaScript在主页上显示特定类别。该脚本使用预定义的类别名称列表(一组用逗号分隔的数组)来获取并渲染来自/categories.json的内容。

虽然大多数类别都正常显示,但仍有一些类别未出现在主页上——即使它们在脚本中明确列出且在系统中存在,具有有效的类别ID。

在检查/categories.json的响应后,我们发现这些特定类别根本未包含在API输出中。然而,它们都:

  • 存在于Discourse实例中
  • 是顶级类别
  • 设置了everyone,至少具有“查看”权限
  • 未归档、未隐藏或未嵌套

我们想了解:

  1. Discourse在什么条件下会从categories.json中省略类别?
  2. 如何确保所有需要的类别都出现在该响应中,特别是如果我们想通过自定义代码在首页显示它们?

任何见解或建议解决方案都将不胜感激。

不确定,但这是否在 /latest 上?也许它只包含主题列表中有帖子的类别?

1 个赞

这是最新版本的 Discourse,还没有任何主题……我尝试根据类别 ID 在一个不可见的类别中创建一个虚拟主题,假设它会调用类别 JSON 来列出它们,但没有帮助,因此我也删除了虚拟主题……目前两个类别都没有任何主题……

听起来我说的没错。让 latest 发送一堆在停机时未使用的类别会很愚蠢。我认为我会做的是硬编码你想要的类别,或者将它们放在主题设置中。

你也可以做一个 Ajax 调用,但这会减慢速度。

FWIW 我刚刚创建了一个空类别,并且可以在我的 /categories.json 中看到它

好的。我认为如果你得到那个端点,它会有类别,但/latest中包含的类别可能只是那些话题所需的类别。

1 个赞

我可能弄混了。 :melting_face: 我以为是关于 /categories.json 因未知原因未包含某些类别,并想尝试排除没有帖子的类别作为原因。

别管我…… :slight_smile:

1 个赞

我不清楚是谁感到困惑。我们俩都可能是对的。我仍然不清楚 OP 到底在看什么。

1 个赞

谢谢 Pfaffman,JammyDodger。由于我们使用的是定制主题,我们尝试通过在现有的暴露类别列表中添加一些以前隐藏的类别,来在首页显示它们。我们已经使用这种方法正确显示了五个类别。然而,添加这两个额外的类别后,它们仍未出现在首页上。为了排查问题,我们甚至在其中一个类别中发布了一个主题,看看是否会触发可见性,但没有任何效果。

您或许可以分享您的代码,也许可以链接到 GitHub。

2 个赞

启用延迟加载后,解决了一开始无法显示的类别问题。 不确定这与问题的关系……然而,这意味着类别没有权限问题……仍未找到根本原因以解决此问题。

那段懒加载的代码,我认为,是为了不发送它认为不需要发送的类别。我不确定该如何说服它,你想要所有类别。