Lorsque vous ajoutez un niveau d'imbrication supplémentaire, toutes les catégories, y compris les catégories enfants, sont affichées sur la page des catégories

J’ai ajouté un niveau supplémentaire de hiérarchisation des catégories. Cependant, lors de l’ajout de sous-catégories à une catégorie enfant, toutes ces catégories s’affichent sur la page principale. Je prévois de créer environ 100 catégories qui devraient être affichées sur la page principale, avec 30 à 50 sous-catégories dans chacune. Actuellement, toutes les catégories sont affichées sur une seule page. Je n’ai trouvé aucun paramètre pour masquer les catégories du deuxième niveau de hiérarchisation sur la page principale.

Vous devez ajouter le paramètre « afficher uniquement les catégories enfants » afin que l’ensemble de l’arborescence des catégories ne soit pas affiché sur la page principale. Sinon, les catégories du deuxième et du troisième niveau de hiérarchisation s’afficheront toujours sur la page principale. Et s’il y en a des milliers ?

3 « J'aime »

Il est généralement déconseillé d’avoir plus qu’une centaine de catégories. Peut-être jeter un œil à Il est temps de parler des étiquettes. La fonctionnalité des sous-sous-catégories est en grande partie non prise en charge, d’après ce que je savais, mais il existe peut-être un moyen de les masquer comme vous le souhaitez.

2 « J'aime »

Les balises ne sont pas aussi structurées que la hiérarchie des catégories. La fonctionnalité de sous-catégorie est prise en charge depuis longtemps et devrait être activée séparément. Cependant, l’ensemble de l’arborescence des catégories reste visible. Par exemple, tout fonctionne correctement pour NodeBB. La page affiche les sous-catégories enfants, mais n’affiche pas les catégories d’un niveau de profondeur supérieur.

3 « J'aime »

Quelqu’un a-t-il déjà résolu ce problème ? @Johani, peux-tu m’aider ?

1 « J'aime »

Ce que vous recherchez est déterminé en fonction d’une propriété appelée isGrandParent dans le modèle ci-dessous.

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

Lorsqu’une catégorie possède des sous-catégories, nous affichons le code HTML correspondant pour ces dernières. Sinon, nous affichons les catégories enfants.

La solution la plus simple consiste à remplacer cette propriété dans le composant Ember parent-category-row.

Vous pouvez y parvenir en utilisant la méthode de l’API des plugins modifyClass.

Developing Discourse Themes & Theme Components

modifyClass vous permet de réouvrir la classe du composant Ember parent-category-row et d’ajouter de nouvelles méthodes.

Pour vous assurer que ces méthodes sont exécutées et que les données sont disponibles, vous devrez les lier au hook didReceiveAttrs.

Pour ce faire, vous pouvez utiliser le décorateur intégré @on.

Une fois que tout est prêt, vous pouvez simplement remplacer isGrandParent pour toutes les catégories rendues via le modèle de ce composant et les définir sur false.

Voici l’ensemble du code assemblé :

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

Vous ajoutez ceci à l’onglet header de votre thème sous common.

Cela entraînera l’affichage uniquement des catégories enfants par le modèle, en ignorant les sous-catégories.

Vous pouvez utiliser ce même modèle pour modifier n’importe quelle propriété dans n’importe quel composant.

2 « J'aime »