Disclaimer specifico per categoria

Ciao,

Ho provato ad aggiungere un disclaimer su una categoria specifica. Ho avuto l’idea di avere un “banner” - come
Questo è il primo post dell'utente - diamo il benvenuto al nuovo membro nella nostra community!
o
È passato un po' di tempo dall'ultima volta che abbiamo visto UTENTE - l'ultimo post risale a 1 anno fa.
sopra ogni post.

Ho provato a raggiungere questo obiettivo con:

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

Solo per completezza ecco il

settings.yml
MY_DISCLAIMER:
  type: string
  default: 'Questo è una categoria che viene fornita con una garanzia limitata e deve essere utilizzata a proprio rischio.'
  description: Testo del disclaimer per la categoria

e c’è anche common/common.scss con la classe .disclaimer al suo interno.

Ma quando attivo questo, il post stesso non viene più mostrato, l’area del contenuto è semplicemente vuota.

Grazie per qualsiasi aiuto!

1 Mi Piace

È vuoto anche nell’originale?

Ciao, bentornato!

Se vedi uno spazio vuoto, è perché hai un errore. find non esiste in helper.
Di solito puoi vederlo nella console del browser (F12).

Probabilmente vuoi qualcosa del genere:

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

o usando HTML grezzo:

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>`})
    }
});

Puoi leggere questo post che spiega come funziona questo helper h.

Puoi fare quanto segue se vuoi aggiungere dell’HTML prima del contenuto cotto:

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

Grazie @Arkshine, è stato di grande aiuto!

Ho usato il seguente codice perché voglio visualizzare il testo sopra, come gli altri banner menzionati.

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

Saluti!

1 Mi Piace

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