Enable tagging only in some categories

This is looking good @neil. One thing that would be good relating to this would be the simple option to ‘enable tags in category’ option in the category modal.

In my use case I only want tags (and specific tags at that) to be able to be used in specific categories. E.g. in those categories where I don’t want tags enabled I wouldn’t want the tag input field to be shown to users. Is this doable?

4 „Gefällt mir“

It’s probably doable, but I have to focus on completing some other tag features first. Will have to come back around to this one later.

9 „Gefällt mir“

I would love to only enable tags in certain categories as well - bookmarking this thread to keep an eye on the discussion moving forward

I think this is currently possible in the way that you can define tag-groups and you can configure category setting in order to use that tag-group.

do you mean something else?

3 „Gefällt mir“

Another feature that would make sense related to this:

If tag filter is enabled, yet only certain categories have tags availble using the ‘Tags that can only be used in this category’ in category settings, I believe the homepage (both the main category, latest and top) pages should have the tag filter disabled by default.

I.e. only when digging down into the categories/sub-categories with tags allowed should the tag filter be shown (showing the respective tags available).

Otherwise from the homepage (whether that be categories or latest), you’ll get a whole bunch of tags in the filter, often without context as they only have context when filtered inside their respective categories.

Does this make sense?

1 „Gefällt mir“

Keen to test this out. Am I able to grab some code somewhere for this? Cheers.

100% zustimmend. In unserem Beispiel haben wir einen Dokumentationsbereich mit einer dedizierten Tag-Gruppe. Ich möchte hier das Tag-Dropdown anzeigen, das nur die dedizierten Tags enthält. Das funktioniert.

Aber ich möchte nicht, dass dieselben Tags im Dropdown auf der übergeordneten Ebene „Neueste

In den Einstellungen der Tag-Gruppe sollte es eine Option wie folgt geben:

[ ] Diese Tag-Gruppe nur auf zugewiesene Kategorien beschränken, nicht in den Dropdown-Menüs der obersten Ebene anzeigen

1 „Gefällt mir“

Das ist etwas, das ich auch gerne sehen würde.

Auf meinem ersten (importierten) Forum brauchte ich eine Kategorie für Kleinanzeigen.

Da es in Discourse keinen „Ordner

Ich versuche die Methode, die mir als Workaround eingefallen ist.

Den Tag-Selektor in der Themenliste mit CSS ausblenden:


(Du musst jeden tagbaren Kategorie mit deinem CSS-Selektor ansprechen)

body:not(.category-other-languages):not(.category-trading-post) {
    .category-breadcrumb .tag-drop {
        display: none;
    }
}

Den Tag-Selektor im Komponisten mit JS ein- und ausblenden:

<script type="text/discourse-plugin" version="0.8.23">
    // Tag-Auswahl im Komponisten nur bei Bedarf anzeigen
    const discourseComputed = require("discourse-common/utils/decorators").default;
    const EmberObject = require("@ember/object").default;
    function toggleTagChooser(display = "hide") {
        if (display == "show") {
            document.getElementsByClassName("mini-tag-chooser")[0].style.display = "block";
            document.getElementsByClassName("reply-area")[0].classList.add("with-tags");
            return;
        }
        // Vorhandensein des Tag-Auswahlmenüs prüfen
        let tagChoser = document.getElementsByClassName("mini-tag-chooser");
        if(tagChoser.length > 0) {
            tagChoser[0].style.display = "none";
            document.getElementsByClassName("reply-area")[0].classList.remove("with-tags");
        }
        return;
    }
    api.modifyClass('controller:composer', {
        @discourseComputed("model.category", "model.tags", "lastValidatedAt")
        tagValidation(category, tags, lastValidatedAt) {
            // benutzerdefinierter Code zum Ein- und Ausblenden des Tag-Auswahlmenüs
            toggleTagChooser("hide");
            if(category != null) {
                if (
                    category.allow_global_tags == true ||
                    category.allowed_tag_groups.length > 0 ||
                    category.allowed_tags.length > 0
                ) {
                    toggleTagChooser("show");
                }
            }
            // Ende des benutzerdefinierten Codes
            const tagsArray = tags || [];
            if (this.site.can_tag_topics && !this.currentUser.staff && category) {
                // category.minimumRequiredTags berücksichtigt sowohl minimum_required_tags als auch required_tag_groups
                if (category.minimumRequiredTags > tagsArray.length) {
                    return EmberObject.create({
                        failed: true,
                        reason: I18n.t("composer.error.tags_missing", {
                            count: category.minimumRequiredTags,
                        }),
                        lastShownAt: lastValidatedAt,
                    });
                }
            }
        }
    });
</script>
1 „Gefällt mir“

Genau das, was ich gesucht habe. Super.

Es ist im aktuellen Core-Code besonders falsch, das Tag-Auswahlfeld anzuzeigen, wenn es für eine Kategorie keine Tags gibt, die ein Benutzer auswählen kann. Der letzte Code löst dieses UX-Problem. Es sollte auf diese Weise im Core sein @team

Darüber hinaus sollte es zwei Standardtexte für das Tag-Auswahl-Dropdown geben:

“optionale Tags”

und einen, wenn Tags für eine Kategorie obligatorisch sind (und für einen Benutzer verfügbar)

“mindestens X Tags auswählen”

1 „Gefällt mir“

Durch das Erstellen einer Tag-Gruppe können Sie festlegen, dass in allen Beiträgen einer Kategorie einer aus einer Reihe von Tags (z. B. „kaufen

1 „Gefällt mir“

Trotzdem erscheint das Tag-Auswahlfeld mit der Beschriftung ‘Optionale Tags’ im Editor für eine Kategorie mit einer obligatorischen Tag-Gruppe und wird auch in Kategorien angezeigt, in denen dem Benutzer in einer anderen Kategorie keine Tags zur Verfügung stehen. Dies ist aus UX-Sicht ziemlich verwirrend. Der Benutzer muss erst den Fehler-Popup sehen, um zu verstehen, was erforderlich ist.

1 „Gefällt mir“

Ich weiß, ich möchte einfach die Tag-Funktion für Kategorien ausblenden, in denen keine Tags verfügbar sind, wie @Terrapop erklärt.

Wenn Tags in den Site-Einstellungen deaktiviert sind, befindet sich der Kategorienselektor auf derselben Zeile wie der Beitragstitel:

Mit meiner Workaround-Lösung wird etwas Platz verschwendet, da der Kategorienselektor immer unter dem Beitragstitel liegt:

Einerseits könnte es eine schlechte UX sein, die Position des Kategorienselektors zu ändern, wenn wir eine Kategorie auswählen, je nachdem, ob Tags erforderlich sind. Andererseits nutzen wir den Kategorienselektor selten mehr als einmal.

1 „Gefällt mir“

Ich mache mir weniger Sorgen um die Verschwendung von Speicherplatz, habe aber ein weiteres „Problem

2 „Gefällt mir“

Entschuldigung, anscheinend habe ich Ihre Nachricht aus dem Jahr 2020 nicht gesehen!

Mein Code ist nach einem kürzlichen Discourse-Update kaputt gegangen. Hier ist ein funktionierendes Update (das CSS ändert sich jedoch nicht):

Zielen Sie auf die Kategorieklassen, für die Sie den Tag-Selektor ausblenden möchten:

body:not(.category-other-languages):not(.category-trading-post) {
    .category-breadcrumb .tag-drop {
        display: none;
    }
}

Das Skript, das den Tag-Selektor dynamisch ein- und ausblendet:


    // Zeigt den Tag-Auswähler im Komponisten nur an, wenn er benötigt wird
    const discourseComputed = require("discourse-common/utils/decorators").default;
    const EmberObject = require("@ember/object").default;
    function toggleTagChooser(display = "hide") {
        if (display == "show") {
            document.getElementsByClassName("mini-tag-chooser")[0].style.display = "block";
            document.getElementsByClassName("reply-area")[0].classList.add("with-tags");
            return;
        }
        // Überprüfen Sie die Existenz des Tag-Auswählers
        let tagChoser = document.getElementsByClassName("mini-tag-chooser");
        if(tagChoser.length > 0) {
            tagChoser[0].style.display = "none";
            document.getElementsByClassName("reply-area")[0].classList.remove("with-tags");
        }
        return;
    }
    api.modifyClass('controller:composer', {
        @discourseComputed("model.category", "model.tags", "lastValidatedAt")
        tagValidation(category, tags, lastValidatedAt) {
            // benutzerdefinierter Code zum Ein- und Ausblenden des Tag-Auswählers
            toggleTagChooser("hide");
            if(category != null) {
                if (
                    category.allow_global_tags == true ||
                    category.allowed_tag_groups.length > 0 ||
                    category.allowed_tags.length > 0
                ) {
                    toggleTagChooser("show");
                }
            }
            // Ende des benutzerdefinierten Codes
            const tagsArray = tags || [];
            if (this.site.can_tag_topics && !this.currentUser.staff && category) {
                // category.minimumRequiredTags beinhaltet sowohl minimum_required_tags als auch required_tag_groups
                if (category.minimumRequiredTags > tagsArray.length) {
                    return EmberObject.create({
                        failed: true,
                        reason: I18n.t("composer.error.tags_missing", {
                            count: category.minimumRequiredTags,
                        }),
                        lastShownAt: lastValidatedAt,
                    });
                }
            }
        }
    });

dazu… es sind 6 Jahre vergangen, Mann :sweat_smile:

Ich denke, die Tag-Gruppen-Funktionalität bietet heutzutage eine ähnliche Erfahrung.

Sie würden eine Tag-Gruppe mit einer Reihe von Kategorien verknüpfen und dann die Erstellung neuer Tags verbieten.

Ich bin mir bei pr-welcome hier nicht sicher, ich entferne es, die gewünschte Änderung muss ordnungsgemäß spezifiziert werden. Dies fragt wahrscheinlich nach einem Kontrollkästchen in den Kategorieeinstellungen, aber selbst das erfordert viel Überlegung: Ist es standardmäßig aktiviert, ist die zusätzliche Einstellung für viele Leute einfach verwirrend?