Cuando agregas un nivel de anidación adicional, todas las categorías, incluidas las categorías secundarias, se muestran en la página de categorías.

He añadido otro nivel de anidación de categorías. Sin embargo, al agregar subcategorías a una categoría hija, todas estas categorías se muestran en la página principal. Planeo crear unas 100 categorías que deberían mostrarse en la página principal, y cada una tendrá entre 30 y 50 subcategorías. Ahora mismo, todas las categorías aparecen en una sola página. No encontré ninguna configuración para ocultar las categorías del segundo nivel de anidación en la página principal.

Es necesario agregar la opción “mostrar solo las categorías hijas” para que no se muestre todo el árbol de categorías en la página principal. De lo contrario, las categorías de segundo y tercer nivel de anidación siempre aparecerán en la página principal. ¿Y si hay miles de ellas?

3 Me gusta

Generalmente se considera una mala idea tener más de un par de cientos de categorías. Quizás puedas echar un vistazo a Es hora de hablar sobre las etiquetas. La función de subsubcategorías está en gran medida sin soporte, según lo último que sabía, pero tal vez haya una manera de ocultarlas como desees.

2 Me gusta

Las etiquetas no están tan estructuradas como la jerarquía de categorías. La función de subcategoría ha sido compatible durante mucho tiempo; debería activarse por separado. Sin embargo, todo el árbol de categorías es visible. Por ejemplo, todo funciona correctamente en NodeBB. La página muestra las subcategorías hijas, pero no muestra las categorías de un nivel de anidación más profundo.

3 Me gusta

¿Alguien ha resuelto este problema? @Johani, ¿puedes ayudarme?

1 me gusta

Lo que estás buscando se determina según una propiedad llamada isGrandParent en la plantilla aquí:

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

Cuando una categoría tiene nietos, renderizamos el marcado correspondiente para las categorías de nietos. De lo contrario, renderizamos las categorías hijas.

La forma más sencilla de sortear esto es sobrescribir esa propiedad en el componente Ember parent-category-row.

Puedes lograrlo con el método de la API de plugins modifyClass.

Developing Discourse Themes & Theme Components

modifyClass te permite volver a abrir la clase del componente Ember parent-category-row y agregar nuevos métodos.

Para asegurar que esos métodos se ejecuten y que los datos estén disponibles, necesitarás conectarlos al hook didReceiveAttrs.

Para hacerlo, puedes usar el decorador incorporado @on.

Una vez que tengas todo listo, simplemente puedes sobrescribir isGrandParent para todas las categorías renderizadas a través de la plantilla de ese componente y establecerlas en false.

Aquí está todo eso junto:

<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>

Agrega esto a la pestaña header de tu tema bajo common.

Esto hará que la plantilla solo renderice las categorías hijas e ignore las categorías de nietos.

Puedes usar este mismo patrón para modificar cualquier propiedad en cualquier componente.

2 Me gusta