Avertissement spécifique à la catégorie

Salut,

J’ai essayé d’ajouter un avertissement sur une catégorie spécifique. J’ai eu l’idée d’avoir une « bannière » comme :
« C’est le premier message de l’utilisateur - souhaitons la bienvenue au nouveau membre dans notre communauté ! »
ou
« Cela fait un moment que nous n’avons pas vu UTILISATEUR - le dernier message date d’il y a 1 an. »
au-dessus de chaque message.

J’ai essayé d’y parvenir avec :

common/head_tag.html
<script type="text/discourse-plugin" version="0.8">
  api.decorateWidget('post:after', (helper, args) => {
    if (args.topic.category_id === 51) {  // Ma catégorie
      const $post = helper.find('.cooked');
      const disclaimerText = api.decorateCooked(helper, args, settings.MY_DISCLAIMER);
      $post.prepend(`<div class="disclaimer">${disclaimerText}</div>`);
    }
  });
</script>

Juste pour être complet, voici le

settings.yml
MY_DISCLAIMER:
  type: string
  default: 'Ceci est une catégorie qui est fournie avec une garantie limitée et doit être utilisée à vos propres risques.'
  description: Texte d'avertissement pour la catégorie

et il y a aussi common/common.scss avec la classe .disclaimer dedans.

Mais lorsque j’active cela, le message lui-même n’est plus affiché, la zone de contenu est juste vide.

Merci pour toute aide !

1 « J'aime »

Est-ce que c’est vide dans la source aussi ?

Salut, bienvenue !

Si vous voyez du vide, c’est parce que vous avez une erreur. find n’existe pas dans helper.
Vous pouvez généralement le voir dans la console du navigateur (F12).

Vous voulez probablement quelque chose comme ceci :

api.decorateWidget('post:before', (helper, args) => {
    if (helper.widget.model.topic.category_id === 51) {
        return helper.h("div.disclaimer", settings.MY_DISCLAIMER)
    }
});

ou en utilisant du HTML brut :

const RawHtml = require("discourse/widgets/raw-html").default;

api.decorateWidget('post:before', (helper, args) => {
    if (helper.widget.model.topic.category_id === 51) {
         return new RawHtml({html: `<div class="container">${settings.MY_DISCLAIMER}</div>`})
    }
});

Vous pouvez lire ce post expliquant comment fonctionne cette aide h.

Vous pouvez faire ce qui suit si vous souhaitez ajouter du HTML avant le contenu cuit :

api.decorateWidget('post-contents:before', (helper, args) => {
    const { topic } = helper.widget.findAncestorModel();

    if (topic && topic.category_id === 51) {
         return helper.h("div.disclaimer", settings.MY_DISCLAIMER);
    }
});
3 « J'aime »

Merci @Arkshine, cela m’a beaucoup aidé !

J’ai utilisé le code suivant car je veux afficher le texte au-dessus de toutes les autres bannières mentionnées.

api.decorateWidget('post:before', (helper, args) => {
    if (helper.widget.model.topic.category_id === 51) {
        return helper.h("div.disclaimer", settings.MY_DISCLAIMER)
    }
});

Salutations !

1 « J'aime »

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.