Option zum Ausblenden von Kategorien der 3. Ebene auf der Kategorien-Startseite ohne Layoutverlust

Wir verwenden eine tiefe, zweistufige Kategorie-Struktur (alle öffentlichen Bibliotheken unserer Stadt mit ihren einzelnen Filialen, plus eine Zentralsammlung mit eigenen Hauptkategorien). Kürzlich mussten wir in einigen Kategorie-Ästen eine dritte Verschachtelungsebene einführen.

Sobald eine Kategorie irgendwo in der Baumstruktur eine Enkelkategorie hat, wechselt die Kategorie-Startseite in den Render-Modus: Statt des kompakten Rasters aus Boxen (Elternkategorie mit ihren direkten Kindern, die darin aufgelistet sind), werden alle Kategorien als lange, einspaltige Liste gerendert. Das macht die Startseite für unsere ~1.200 Mitarbeitenden extrem lang und schwer zu überblicken.

Dies scheint durch die Eigenschaft isGrandParent gesteuert zu werden, die in diesem verwandten Thread beschrieben wird: When you add an additional nesting level, all categories, including child categories, are displayed on the categories page

Was wir uns wünschen

Unsere bevorzugte Option: Eine Möglichkeit, das Standard-“Boxen”-Layout der Startseite beizubehalten, auch wenn eine Kategorie eine dritte Verschachtelungsebene hat – z. B. indem die Enkelkategorien einfach nicht auf der Startseite angezeigt werden (sie wären weiterhin über die Elternkategorie-Seite erreichbar).

Alternativ eine native, aufklappbare/zusammenklappbare Ansicht für Kategorien mit Enkelkategorien direkt auf der Kategorie-Startseite, sodass Nutzer nur die Äste aufklappen können, die sie benötigen, anstatt dass alles flach aufgelistet wird.

Warum wir eine native/official Lösung anfragen

Wir sind uns bewusst, dass es Theme-Component/CSS- oder JS-Workarounds gibt (z. B. das Überschreiben von isGrandParent via modifyClass), die im oben verlinkten älteren Thread diskutiert wurden. Wir möchten diesen Weg nicht gehen: Wir verfügen intern nicht über tiefes Frontend-Expertise, und wir befürchten unerwartete Nebeneffekte oder Brüche bei zukünftigen Discourse-Updates, wenn wir die Kern-Render-Logik selbst überschreiben. Eine unterstützte Einstellung oder offizielle Option wäre für uns langfristig viel sicherer zu warten.

Wir sind uns bewusst, dass Discourse tiefe Verschachtelungen nicht offiziell empfiehlt, aber für unsere Organisationsstruktur (mehrere Institutionen, jede mit mehreren Standorten, die jeweils eigenen Raum benötigen) ist das für uns keine Option.
Eine unterstützte Möglichkeit, die Startseite-Anzeige für diese Fälle zu steuern, würde sehr helfen, und wir sind sicher, dass es seit 2021 auch in anderen Organisationen Bedarf an einer versteckten 3. Ebene geben könnte?

Screenshots angehängt: Unser aktuelles 2-stufiges Startseite-Layout

und wie es aktuell zusammenbricht, sobald eine 3. Ebene eingeführt wird.

5 „Gefällt mir“

Ich bin mir nicht sicher, aber dieses Customization > Theme component könnte vielleicht das liefern, wonach du suchst, oder es lässt sich anpassen. Vielleicht ist der Entwickler auch offen dafür, die Funktion hinzuzufügen.

1 „Gefällt mir“

Das ist ein nachvollziehbarer Wunsch. Es kann schwierig sein, das Layout der /categories-Seite auszubalancieren, wenn es nur wenige Kategorien mit mehreren Ebenen von Unterkategorien gibt.

Wir möchten, dass modifyClass nicht mehr verwendet wird, da, wie du erwähnt hast, die Pflege solcher Overrides einen gewissen Entwicklungsaufwand mit sich bringen kann.

Wir haben inzwischen neuere Anpassungsmethoden, mit denen wir arbeiten können und die sich leichter stabil halten lassen. In diesem Fall kann ein Value-Transformer helfen. Ich habe gerade einen hinzugefügt, der bald in Updates verfügbar sein wird: DEV: Add a category-list-subcategories value transformer - Pull Request #42804 - discourse/discourse - GitHub

Die einfache Demo sieht ungefähr so aus:

api.registerValueTransformer(
  "category-list-subcategories",
  ({ value, context }) =>
  context.page === "categories" && context.category.level >= 1 ? [] : value
);

Dies zeigt nur eine Ebene von Unterkategorien an. Mit dem Transformer stehen jetzt weitere Optionen zur Verfügung, daher habe ich ein Theme-Component zusammengestellt, das wir pflegen können, um diese zu unterstützen.

Sobald Discourse aktualisiert wurde, kannst du dies installieren, um zu steuern, wie viele Unterkategorien auf /categories und einigen anderen Kategorielisten angezeigt werden:

Setze Categories page depth auf 2, um alle Enkelkategorien auszublenden.

2 „Gefällt mir“

Hey, vielen Dank!

Kannst du vorhersagen, wie sich die Kategorieebene 2 verhalten wird? Also, ob sie nebeneinander wieder in ihre ursprüngliche Reihenfolge zurückkehren?

1 „Gefällt mir“

Ja, die Reihenfolge bleibt gleich … das ist im Wesentlichen ein unterstützter Weg, um isGrandParent zu überschreiben

Hier ein Vorher/Nachher-Vergleich von meiner Testseite

3 „Gefällt mir“