nstoecki42
(Nico Stöckigt)
Abril 28, 2023, 10:24am
1
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
Stephen
(Stephen)
Abril 28, 2023, 10:44am
2
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
system
(system)
Fechado
Junho 1, 2023, 8:49am
5
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.