Aviso específico da categoria

Olá,

Tentei adicionar um Aviso em uma Categoria específica. Tive a ideia de ter um “banner” - como
Este é o primeiro post do Usuário - vamos dar as boas-vindas ao novo membro em nossa comunidade!
ou
Faz um tempo que não vemos USUÁRIO - o último post foi há 1 ano.
acima de cada Post.

Tentei alcançar isso com:

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

Apenas para completar, aqui está o

settings.yml
MY_DISCLAIMER:
  type: string
  default: 'Este é um Categoria que vem com garantia limitada e deve ser usado por sua conta e risco.'
  description: Texto do Aviso para Categoria

e também há common/common.scss com a classe .disclaimer nele.

Mas quando ativo isso, o próprio Post não é mais exibido, a área de conteúdo fica em branco.

Obrigado por qualquer ajuda!

1 curtida

Está em branco na origem também?

Olá, bem-vindo de volta!

Se você vir em branco, é porque tem um erro. find não existe em helper.
Normalmente, você pode ver isso no console do navegador (F12).

Você provavelmente quer algo assim:

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

ou usando HTML puro:

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

Você pode ler este post explicando como este helper h funciona.

Você pode fazer o seguinte se quiser adicionar algum HTML antes do conteúdo cozido:

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 curtidas

Obrigado @Arkshine, isso ajudou muito!

Usei o seguinte código porque quero exibir o texto acima de todos os outros banners mencionados.

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

Saudações!

1 curtida

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