Comment obtenir des informations de catégorie à partir de composer ?

Est-il possible d’exécuter du code (à partir d’un composant de thème) lorsqu’une catégorie est sélectionnée dans le compositeur ? Je souhaite récupérer la catégorie sélectionnée à la fois lorsque le compositeur vient d’être ouvert et lorsque la liste déroulante des catégories a été modifiée.

Je pensais que cela pourrait être possible en modifiant un contrôleur ou un composant, comme le contrôleur du compositeur. Mais je n’ai pas réussi à trouver les informations sur la catégorie…

Vous pouvez observer model.categoryId dans le contrôleur du compositeur et exécuter votre code lorsque le changement se produit.

Merci @fzngagan !

Une question complémentaire, je n’ai jamais observé de modèle auparavant :slight_smile: . J’ai trouvé ce qui suit et cela semble fonctionner.

const { observes } = require('discourse-common/utils/decorators');
api.modifyClass("controller:composer", {
    @observes('model.categoryId')
    getCategory() {
        let categoryId = this.get("model.categoryId");
        if (categoryId == null) return;
        
        let category = this.site.categories.findBy("id", categoryId).name;
    }
});

Est-ce la bonne façon (ou la façon préférée) de le faire ? Et est-ce la meilleure façon d’obtenir le nom de la catégorie à partir de l’identifiant ?

Vous pouvez vérifier ce que contient l’objet model. Il est possible que le nom de la catégorie y figure déjà.

Avec « objet modèle », voulez-vous dire que je devrais faire quelque chose comme ça, c’est bien ça ?

this.get("model")

Édition :
Quoi qu’il en soit, le code fonctionne très bien. Merci encore !