Ich verstehe, ich habe gerade ein lokales Debugging durchgeführt und bestätige, dass dies bei Standardinstallationen von Discourse zu 100 % reproduzierbar ist.
Lassen Sie mich hier zusammenfassen:
Es gibt 2 Einstellungen für “Uncategorized”:
allow_uncategorized_topics Standard aus
suppress_uncategorized_badge Standard an
Wenn allow_uncategorized_topics deaktiviert ist (Standardeinstellung), sickert seine Präsenz an bestimmten Stellen durch.
Wenn Sie versuchen, dies zu umgehen, indem Sie “Uncategorized” aktivieren, damit Sie es löschen können, werden Sie mit Folgendem konfrontiert:
In Discourse ist diese Kategorie insofern sehr seltsam:
- Sie muss vorhanden sein
- Sie kann nicht gelöscht werden
- Wir injizieren sie in viele Logiken an vielen Stellen:
Wir können das Durchsickern beheben, indem wir einfach mehr und mehr Bedingungen hinzufügen. Wir sind wahrscheinlich bei mindestens 10 angelangt, sowohl auf der Client- als auch auf der Serverseite.
Oder wir können dies im Kern beheben, indem wir Administratoren einfach erlauben, die Kategorie zu löschen. Dann verschwindet sie und wir müssen sie nie wieder überprüfen.
Meine Empfehlung hier ist:
- Löschen Sie beide Einstellungen und die versteckte Einstellung
uncategorized_category_id. - Haben Sie ein Konzept für eine Standardkategorie (was wir bereits haben) - wir haben bereits
default_composer_category. - “Uncategorized” ist dann kein spezielles Konzept mehr, weniger Dinge, über die man nachdenken muss.
- Haben Sie eine Theme-Komponente für Leute, die unbedingt eine “Kategorie ohne Auszeichnung” haben müssen.
Der aktuelle Suchfehler kann mit etwas wie diesem behoben werden:
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"
);
});
}
);
Aber das ist nur der Bug in der erweiterten Suche, wir spielen hier “Wack-a-Mole” …

