Quando você adiciona um nível de aninhamento adicional, todas as categorias, incluindo categorias filhas, são exibidas na página de categorias

Adicionei mais um nível de aninhamento de categorias. No entanto, ao adicionar subcategorias a uma categoria filha, todas essas categorias são exibidas na página principal. Planejo criar cerca de 100 categorias que devem aparecer na página principal, com 30 a 50 subcategorias em cada uma. Atualmente, todas as categorias estão sendo exibidas em uma única página. Não encontrei nenhuma configuração para ocultar as categorias do segundo nível de aninhamento na página principal.

É necessário adicionar a configuração “mostrar apenas as categorias filhas”, para que toda a árvore de categorias não seja exibida na página principal. Caso contrário, as categorias do segundo e terceiro níveis de aninhamento sempre aparecerão na página principal. E se houver milhares delas?

3 curtidas

Geralmente, considera-se uma má ideia ter mais de algumas centenas de categorias. Talvez valha a pena dar uma olhada em É Hora de Falarmos sobre Etiquetas. Até onde eu sei, o recurso de sub-subcategoria é amplamente não suportado, mas talvez exista uma maneira de escondê-las conforme desejar.

2 curtidas

As tags não são tão estruturadas quanto a hierarquia de categorias. A função de subcategoria é suportada há muito tempo e deve ser ativada separadamente. No entanto, toda a árvore de categorias permanece visível. Por exemplo, tudo funciona corretamente para o NodeBB. A página exibe as subcategorias filhas, mas não as categorias de níveis de aninhamento mais profundos.

3 curtidas

Alguém já resolveu esse problema? @Johani, você pode me ajudar?

1 curtida

O que você está procurando é determinado por uma propriedade chamada isGrandParent no modelo aqui.

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

Quando uma categoria tem netos, renderizamos o markup relevante para as categorias de netos. Caso contrário, renderizamos as categorias filhas.

A maneira mais fácil de contornar isso é sobrescrever essa propriedade no componente Ember parent-category-row.

Você pode fazer isso com o método da API de plugin modifyClass.

Developing Discourse Themes & Theme Components

O modifyClass permite que você reabra a classe do componente Ember parent-category-row e adicione novos métodos.

Para garantir que esses métodos sejam executados e os dados estejam disponíveis, você precisará conectá-los ao hook didReceiveAttrs.

Para fazer isso, você pode usar o decorador embutido @on.

Depois de ter tudo pronto, você pode simplesmente sobrescrever isGrandParent para todas as categorias renderizadas via o modelo desse componente e defini-las como false.

Aqui está tudo isso reunido:

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

Você adiciona isso à aba header do seu tema sob common.

Isso fará com que o modelo renderize apenas as categorias filhas e ignore as categorias de netos.

Você pode usar o mesmo padrão para modificar qualquer propriedade em qualquer componente.

2 curtidas