已禁用的未分类显示在类别下拉列表中

这是它的最新版本吗?它已禁用,并且:

但在各种类别下拉菜单中显示。后端可能不是什么大问题,但它也在搜索中被建议:

1 个赞

我在主线上没有重现此问题。

@j.jaffeux 我可以在 try.discourse.org 上复现此问题。我可以判断出该论坛禁用了“允许未分类主题”设置,因为在主题撰写器的“类别…”菜单中不存在“未分类”。

高级搜索菜单

在搜索页面的高级搜索的“分类”菜单中存在“未分类”。

  1. 点击以下链接在浏览器中打开 Discourse 演示论坛的高级搜索页面:
    https://try.discourse.org/search
  2. 点击“高级过滤器”。
    页面的“高级过滤器”部分将展开。
  3. 点击“所有类别”菜单。
    菜单将打开。

:bug: 菜单中存在“未分类”项。

搜索自动完成

  1. 点击以下链接在浏览器中打开 Discourse 演示论坛:
    https://try.discourse.org/
  2. 点击页面右上角的放大镜图标(“搜索”)。
    搜索界面将打开。
  3. 在“搜索”字段中键入“#u”。
    类别过滤器自动完成菜单将出现。

:bug: 类别过滤器自动完成菜单中存在“未分类”项。

帖子撰写器自动完成

  1. 如果您还没有 try.discourse.org 账户,请创建一个。
  2. 登录您的 try.discourse.org 账户。
  3. 点击以下链接在浏览器中打开 Discourse 演示论坛:
    https://try.discourse.org/
  4. 点击页面右上角的“新主题”按钮。
    帖子撰写器将打开。
  5. 点击帖子撰写器中的帖子正文字段。
  6. 在“搜索”字段中键入“#u”。
    类别过滤器自动完成菜单将出现。

:bug: 类别过滤器自动完成菜单中存在“未分类”项。

重新排序类别

我也能在“重新排序类别”对话框中复现“未分类”类别的存在。我在一个我拥有管理员权限的论坛上复现了这一点,并且该论坛禁用了“允许未分类主题”设置(显然我无法在 try.discourse.org 上测试它)。该论坛使用的是 Discourse 版本 d8c855e55978d00fc63021b31ecd00a4bee9d922

  1. 登录到禁用了“允许未分类主题”设置的论坛上的管理员账户。
  2. 打开“类别”页面(/categories)。
  3. 点击页面右上角附近的扳手图标(“管理类别”)。
    重新排序类别”对话框将打开。

:bug: 对话框中存在“未分类”项。

我同意 @manuel 的观点,即该项出现在此对话框中的严重性不如出现在面向用户的界面中,但我认为我应该提及它,因为您显然甚至无法复现该故障。

3 个赞

@hugh 我甚至不确定我们是否想长期保留这个“未分类”的混乱局面。

多年来,我一直努力摆脱它,但新的边缘情况层出不穷。

在我看来,我们应该放弃这些设置,只允许人们选择一个默认类别。主题组件可以隐藏特定的类别徽章,以应对那些不希望在“通用”或其他类似类别中显示它的罕见情况。

2 个赞

维护者是否能够通过遵循我在我之前的回复中描述的步骤重现该故障?我之所以这样问,是因为我看到该主题仍然带有 needs-repro 标签。

如果您能够重现该故障,请从该主题中删除该标签,以便清楚地表明该报告在当前状态下是可操作的。

2 个赞

请稍等,它已脱离我们的雷达,我们正在优先处理此问题以确认重现并分配给成员 xp

1 个赞

Per,我不想用“再试一次”来回答这个问题

但我很想知道,是什么阻止了您在 Arduino 上终止使用“隐藏未分类”?

我觉得这个功能很令人困惑,在另一个宇宙里,我会直接删除站点设置,主题需要一个类别,所以存在这样一个主题有类别(但实际上没有类别)的宇宙,对于最终用户来说很令人困惑,而且作用很小,因为如果用户无法分类,他们可以随便将内容放入“常规”类别。

您希望我们帮助将“抓取未分类主题”移植到“常规”类别吗?

2 个赞

您的意思是取消选中“允许未分类主题”站点设置吗?

如果是这样,那么 Arduino 论坛就是(并且一直都是)这样配置的。

请注意,除了“重新排序类别”(我们已经说明这不是很重要)之外,我已经验证了您在 try.discourse.org 上提供的说明可以重现该错误。因此,Arduino 论坛与此对话没有直接关系。从普通用户的角度来看,“允许未分类主题”站点设置在 try.discourse.org 上是禁用的。

此处报告的问题是,在通过“允许未分类主题”站点设置禁用该类别的论坛上,Uncategorized 类别在用户界面中可见。

我对此没意见。

作为一个多年来一直努力让用户为他们的话题选择合适类别的人,我理解为什么一些论坛管理员会发现有一个允许用户选择跳过类别选择的选项的功能很有用。但是,我对在我的论坛上使用“允许未分类主题”功能不感兴趣,因此该功能的删除不会对我个人产生影响。

由于我没有使用“允许未分类主题”功能的经验,因此我无法评论该功能与仅使用普通类别相比的相对优点,正如您所建议的那样。

我认为与使用该功能的人交谈以了解其是否真正需要是一个好主意;我碰巧不是那个人。

我不确定我是否理解您的意思。但我很想了解。

您是在提供对 Arduino 论坛分类的某种形式的帮助吗?

如果您正在查看 Arduino 论坛,可能会引起混淆的是,我们确实有一个名为“未分类”的类别。但是,这是一个普通类别,碰巧有这个名称,而不是“允许未分类主题”站点设置提供的特殊类别。我们的“未分类”类别实际上与“允许未分类主题”功能的目的完全相反。它与此 bug 报告的主题无关,但以防您想知道我们为什么这样做,解释如下:此处

2 个赞

好的,我明白了,我进行了一些本地调试,我确认在默认的 Discourse 安装中,这个问题 100% 可以复现。

我在此总结一下:

关于“未分类”有两个设置:

allow_uncategorized_topics 默认 关闭
suppress_uncategorized_badge 默认 开启

allow_uncategorized_topics 被禁用时(默认设置),我们会将其存在泄露到某些地方。

如果你尝试通过启用“未分类”来删除它,你会看到:

在 Discourse 中,这个分类非常奇怪,因为它:

  1. 必须 存在
  2. 不能 被删除
  3. 我们将其注入到 很多 逻辑的 很多 地方:

我们可以通过添加越来越多的条件语句来修复这种泄露,现在客户端和服务器端大概有 10 个左右。

或者我们可以 从根本上解决这个问题,只允许管理员 删除该分类,然后它就会消失,我们再也不需要检查它了。

我的建议是:

  1. 删除这两个设置,并删除隐藏设置 uncategorized_category_id
  2. 拥有一个默认分类的概念(我们已经有了)- 我们已经有了 default_composer_category
  3. “未分类”就不再是一个特殊概念,需要考虑的东西更少。
  4. 为那些必须有一个“没有徽章的分类”的人提供一个主题组件。

当前的搜索错误可以通过类似以下方式修复:

diff --git a/app/assets/javascripts/select-kit/addon/components/search-advanced-category-chooser.js b/app/assets/javascripts/select-kit/addon/components/search-advanced-category-chooser.js
index a678919d16..83a9ed27db 100644
--- a/app/assets/javascripts/select-kit/addon/components/search-advanced-category-chooser.js
+++ b/app/assets/javascripts/select-kit/addon/components/search-advanced-category-chooser.js
@@ -1,4 +1,5 @@
 import { classNames } from "@ember-decorators/component";
+import { setting } from "discourse/lib/computed";
 import CategoryChooserComponent from "select-kit/components/category-chooser";
 import {
   pluginApiIdentifiers,
@@ -7,11 +8,13 @@ import {
 
 @classNames("search-advanced-category-chooser")
 @selectKitOptions({
-  allowUncategorized: true,
+  allowUncategorized: "allowUncategorized",
   clearable: true,
   none: "category.all",
   displayCategoryDescription: false,
   permissionType: null,
 })
 @pluginApiIdentifiers("search-advanced-category-chooser")
-export default class SearchAdvancedCategoryChooser extends CategoryChooserComponent {}
+export default class SearchAdvancedCategoryChooser extends CategoryChooserComponent {
+  @setting("allow_uncategorized_topics") allowUncategorized;
+}
import { render } from "@ember/test-helpers";
import { module, test } from "qunit";
import { setupRenderingTest } from "discourse/tests/helpers/component-test";
import selectKit from "discourse/tests/helpers/select-kit-helper";
import SearchAdvancedCategoryChooser from "select-kit/components/search-advanced-category-chooser";

module(
  "Integration | Component | select-kit/search-advanced-category-chooser",
  function (hooks) {
    setupRenderingTest(hooks);

    hooks.beforeEach(function () {
      this.set("subject", selectKit());
    });

    test("respects allow_uncategorized_topics setting when false", async function (assert) {
      this.siteSettings.allow_uncategorized_topics = false;

      await render(
        <template><SearchAdvancedCategoryChooser /></template>
      );

      await this.subject.expand();

      // Uncategorized category (ID 17 in test data) should not be present when setting is false
      assert.false(
        this.subject.rowByValue(17).exists(),
        "uncategorized category is not available when allow_uncategorized_topics is false"
      );
    });

    test("shows uncategorized category when allow_uncategorized_topics is true", async function (assert) {
      this.siteSettings.allow_uncategorized_topics = true;

      await render(
        <template><SearchAdvancedCategoryChooser /></template>
      );

      await this.subject.expand();

      // Uncategorized category (ID 17 in test data) should be present when setting is true
      assert.true(
        this.subject.rowByValue(17).exists(),
        "uncategorized category is available when allow_uncategorized_topics is true"
      );
    });

    test("has correct default options", async function (assert) {
      await render(
        <template><SearchAdvancedCategoryChooser /></template>
      );

      assert.strictEqual(
        this.subject.header().label(),
        "All categories",
        "has correct default none label"
      );
    });
  }
);

但这只是高级搜索的错误,我们一直在玩打地鼠游戏……

3 个赞