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.