Quando aggiungi un ulteriore livello di nidificazione, tutte le categorie, comprese le sottocategorie, vengono visualizzate nella pagina delle categorie

Ho aggiunto un ulteriore livello di annidamento delle categorie. Tuttavia, quando si aggiungono sottocategorie a una categoria figlia, tutte queste categorie vengono visualizzate nella pagina principale. Intendo creare circa 100 categorie che dovrebbero essere mostrate nella pagina principale, con 30-50 sottocategorie ciascuna. Attualmente, tutte le categorie vengono visualizzate in una sola pagina. Non ho trovato impostazioni per nascondere le categorie di secondo livello di annidamento nella pagina principale.

È necessario aggiungere l’impostazione “mostra solo le categorie figlie” in modo che l’intero albero delle categorie non venga visualizzato nella pagina principale. Altrimenti, le categorie di secondo e terzo livello di annidamento verranno sempre mostrate nella pagina principale. E se ce ne fossero migliaia?

3 Mi Piace

Generalmente è considerato una cattiva idea avere più di un paio di centinaia di categorie. Forse dà un’occhiata a È ora di parlare di tag. L’ultima volta che ho controllato, la funzione delle sottocategorie di terzo livello era in gran parte non supportata, ma forse c’è un modo per nasconderle come desideri.

2 Mi Piace

I tag non sono strutturati come la gerarchia delle categorie. La funzione delle sottocategorie è supportata da molto tempo e dovrebbe essere abilitata separatamente. Tuttavia, l’intera albero delle categorie è visibile. Ad esempio, tutto funziona correttamente per NodeBB. La pagina visualizza le sottocategorie figlie, ma non mostra le categorie di livelli di nidificazione più profondi.

3 Mi Piace

Qualcuno ha già risolto questo problema? @Johani, puoi aiutarmi?

1 Mi Piace

Ciò che stai cercando è determinato da una proprietà chiamata isGrandParent nel template qui.

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

Quando una categoria ha sottocategorie di secondo livello, viene renderizzato il markup pertinente per le sottocategorie di secondo livello. Altrimenti, vengono renderizzate le sottocategorie di primo livello.

Il modo più semplice per aggirare questo problema è sovrascrivere quella proprietà nel componente Ember parent-category-row.

Puoi farlo utilizzando il metodo dell’API dei plugin modifyClass.

Developing Discourse Themes & Theme Components

modifyClass ti permette di riaprire la classe del componente Ember parent-category-row e aggiungere nuovi metodi.

Per assicurarti che quei metodi vengano eseguiti e che i dati siano disponibili, dovrai collegarli all’hook didReceiveAttrs.

Per fare ciò, puoi utilizzare il decoratore integrato @on.

Una volta che tutto è pronto, puoi semplicemente sovrascrivere isGrandParent per tutte le categorie renderizzate tramite il template di quel componente e impostarle su false.

Ecco tutto riunito

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

Aggiungi questo alla scheda header del tuo tema sotto common.

Ciò farà sì che il template renderizzi solo le sottocategorie di primo livello e ignori quelle di secondo livello.

Puoi utilizzare questo stesso schema per modificare qualsiasi proprietà in qualsiasi componente.

2 Mi Piace