Fortsetzung der Diskussion aus Wie man das Forum in zwei Hauptteile (Allgemein/Gruppen) aufteilt und nur Unterkategorien anzeigt, in denen man neue Beiträge erstellen kann:
Hallo zusammen,
Hier ist eine Theme-Komponente, die etwas umsetzt, das ich schon lange machen wollte. Ich würde mich jedoch über eure Kommentare zum Code freuen, um ihn zu verbessern, oder über eure Vorschläge.
Ich bin nicht überzeugt, dass der Code wirklich gut ist, daher möchte ich ihn nicht empfehlen, bevor er von jemand anderem geprüft wurde.
Was es tut
Versteckt mit CSS alle Themen, für die der Benutzer in den ausgewählten Seiten eine Kategorieneinschränkung hat.
Repository
Link zum Repository
framagit.org/oca/discourse-theme-shroud-subcategories
Motivation
Ich habe eine Community mit vielen Gruppen und möchte, dass die Leute den Inhalt anderer Gruppen friedlich ignorieren. Ich möchte keinen Zugriff auf den Inhalt einschränken, ich möchte nur, dass er nicht auf der Hauptseite angezeigt wird. Sie sollten in der Lage sein, darauf zuzugreifen, indem sie gezielt diese Kategorie aufrufen (zum Beispiel, um zu wissen, was dort diskutiert wird). Offensichtlich wäre das passende Werkzeug die Funktion „Beobachten/Ignorieren“, aber da die Benutzeroberfläche mehr als zwei Klicks erfordert, um sie einzurichten, nutzt sie niemand in der Community. Einige Verbesserungen auf der Kategorienseite könnten helfen, liegen aber außerhalb meiner Fähigkeiten.
Deshalb nutze ich die Benutzeroberfläche, die für sie einfach genug ist: die Gruppenübersicht. Auf derselben Seite werden alle Gruppen angezeigt, auf die sie zugreifen können – frei oder nicht – sowie deren Beschreibung. Das ist perfekt; sie müssen sie nur anklicken und auswählen. Die Gruppenübersicht ist für sie zu gut versteckt (im Hamburger-Menü), daher könnte ich einen großen Button-Link auf der Hauptseite platzieren.
Jetzt muss ich die Gruppenmitgliedschaft mit der Anzeige der Kategoriennachrichten verknüpfen.
Funktionsweise
Der Trick, den ich angewendet habe, bestand darin, die Kategorieneinstellungen wie folgt zu konfigurieren:
- Alle: Lesen, Schreiben
- Diese Gruppe: Nachricht starten, Lesen, Schreiben
Dann wird für jedes Thema in der Liste geprüft, ob eine Kategorieneinschränkung besteht. Falls ja, wird dem Themen-Element die Klasse not-in-group hinzugefügt.
Anschließend fügt das CSS entsprechend display:none hinzu.
Benutzeroberfläche
Der Administrator kann die Seiten auswählen, auf denen dieses Verhalten wirksam ist. Dies sollte nicht auf der Kategorienseite erfolgen, da dies definitionsgemäß der Ort ist, an dem wir auf den Inhalt zugreifen wollen. Auf meiner Website sind all diese Gruppen Unterkategorien, die auf der Seite latest ausgeblendet sind; wir greifen über die Seite /c/groups/ darauf zu, daher wird diese Seite verwendet.
Verbesserungen
- Möglichkeit, übergeordnete Kategorien der gefilterten Kategorien auszuwählen (so dass jede Kategorie, die kein Kind dieser Kategorie ist, sicher vor dem Überspringen ist)
- Tags hinzufügen, sodass ein Thema mit diesem Tag nicht entfernt wird.
