Descargo de responsabilidad específico de la categoría

Hola,

Intenté agregar un descargo de responsabilidad en una categoría específica. Tuve la idea de tener un “banner”, como:
Este es el primer post del usuario - ¡demos la bienvenida al nuevo miembro a nuestra comunidad!
o
Ha pasado un tiempo desde que vimos al USUARIO - el último post fue hace 1 año.
encima de cada post.

Intenté lograr esto 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) {  // Mi Categoría
      const $post = helper.find('.cooked');
      const disclaimerText = api.decorateCooked(helper, args, settings.MY_DISCLAIMER);
      $post.prepend(`<div class="disclaimer">${disclaimerText}</div>`);
    }
  });
</script>

Solo para completar, aquí está el

settings.yml
MY_DISCLAIMER:
  type: string
  default: 'Este es una categoría que viene con garantía limitada y se usa bajo su propio riesgo.'
  description: Texto de descargo de responsabilidad para la categoría

y también hay common/common.scss con la clase .disclaimer en él.

Pero cuando activo esto, el post en sí ya no se muestra, el área de contenido está en blanco.

¡Gracias por cualquier ayuda!

1 me gusta

¿También está en blanco en el original?

Hola, ¡bienvenido de nuevo!

Si ves un espacio en blanco, es porque tienes un error. find no existe en helper.
Normalmente puedes verlo en la consola del navegador (F12).

Probablemente quieras algo como esto:

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 sin procesar:

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

Puedes leer esta publicación que explica cómo funciona esta ayuda h.

Puedes hacer lo siguiente si quieres añadir algo de HTML antes del contenido cocido:

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 Me gusta

¡Gracias @Arkshine, eso ayudó mucho!

Usé el siguiente código porque quiero mostrar el texto encima de todo, como las otras pancartas mencionadas.

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

¡Saludos!

1 me gusta

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