Wenn Sie eine zusätzliche Verschachtelungsebene hinzufügen, werden alle Kategorien, einschließlich Unterkategorien, auf der Kategorieseite angezeigt

Ich habe eine weitere Ebene der Kategorietief verschachtelt. Beim Hinzufügen von Unterkategorien zu einer Kindkategorie werden jedoch alle diese Kategorien auf der Hauptseite angezeigt. Ich plane, etwa 100 Kategorien zu erstellen, die auf der Hauptseite angezeigt werden sollen. Jede Untergruppe enthält 30–50 Unterkategorien. Derzeit werden alle Kategorien auf einer einzigen Seite angezeigt. Ich habe keine Einstellungen gefunden, um die Kategorien der zweiten Verschachtelungsebene auf der Hauptseite auszublenden.

Es muss eine Einstellung „Nur Kindkategorien anzeigen

3 „Gefällt mir“

Es gilt allgemein als keine gute Idee, mehr als ein paar hundert Kategorien zu haben. Vielleicht werfen Sie einen Blick auf Es ist an der Zeit, über Tags zu sprechen. Die Funktion für Unterkategorien war, soweit ich weiß, weitgehend nicht unterstützt, aber vielleicht gibt es eine Möglichkeit, sie nach Wunsch auszublenden.

2 „Gefällt mir“

Tags sind nicht so strukturiert wie die Kategorienhierarchie. Die Funktion für Unterkategorien wird seit langem unterstützt und sollte separat aktiviert werden. Allerdings ist der gesamte Kategoriensbaum sichtbar. Beispielsweise funktioniert bei NodeBB alles korrekt: Die Seite zeigt untergeordnete Unterkategorien an, aber keine Kategorien einer tieferen Verschachtelungsebene.

3 „Gefällt mir“

Hat dieses Problem schon jemand gelöst? @Johani, kannst du mir helfen?

1 „Gefällt mir“

Was Sie suchen, wird basierend auf einer Eigenschaft namens isGrandParent in der folgenden Vorlage festgelegt:

discourse/app/assets/javascripts/discourse/app/templates/components/parent-category-row.hbs at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse · GitHub

Wenn eine Kategorie Enkelkategorien hat, wird das entsprechende Markup für Enkelkategorien gerendert. Andernfalls werden die Unterkategorien gerendert.

Der einfachste Weg, dies zu umgehen, besteht darin, diese Eigenschaft in der Ember-Komponente parent-category-row zu überschreiben.

Das können Sie mit der Plugin-API-Methode modifyClass erreichen.

Developing Discourse Themes & Theme Components

modifyClass ermöglicht es Ihnen, die Ember-Komponentenklasse parent-category-row erneut zu öffnen und neue Methoden hinzuzufügen.

Damit diese Methoden ausgeführt werden und die Daten verfügbar sind, müssen Sie sie mit dem Hook didReceiveAttrs verknüpfen.

Dafür können Sie den integrierten Dekorator @on verwenden.

Sobald alles vorbereitet ist, können Sie einfach isGrandParent für alle Kategorien überschreiben, die über die Vorlage dieser Komponente gerendert werden, und sie auf false setzen.

Hier ist alles zusammengefasst:

<script type="text/discourse-plugin" version="0.8">
  const { on } = require("discourse-common/utils/decorators");

  api.modifyClass("component:parent-category-row", {
    @on("didReceiveAttrs")
    removeGrandchildCategories() {
      this.category?.set("isGrandParent", false);
    }
  });
</script>

Fügen Sie dies im Tab header Ihres Themes unter common hinzu.

Dadurch wird die Vorlage so gesteuert, dass nur Unterkategorien gerendert und Enkelkategorien ignoriert werden.

Sie können dieses Muster verwenden, um jede Eigenschaft in jeder Komponente zu ändern.

2 „Gefällt mir“