카테고리별 면책 조항

안녕하세요,

특정 카테고리에 면책 조항(Disclaimer)을 추가하려고 시도했습니다. 각 게시물 위에 다음과 같은 "배너"를 표시하는 아이디어가 있었거든요:
이 사용자의 첫 번째 게시물입니다 — 새 커뮤니티 멤버를 환영합시다!
또는
USER를 오랜만에 다시 봅니다 — 마지막 게시물이 1년 전이었거든요.

이를 위해 다음을 시도해 보았습니다:

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

참고로 여기에는

settings.yml
MY_DISCLAIMER:
  type: string
  default: 'This is a Category that comes with limited warranty and is to be used at your own risk.'
  description: Disclaimer Text for Category

또한 .disclaimer 클래스가 포함된 common/common.scss 파일도 있습니다.

하지만 이 기능을 활성화하면 게시물 자체는 더 이상 표시되지 않고, 콘텐츠 영역이 그냥 비어 있습니다.

도움 주시면 감사하겠습니다!

원본에서도 공백인가요?

안녕하세요, 다시 오신 것을 환영합니다!

화면이 빈 것으로 보이면 오류가 있는 것입니다. helper에는 find가 존재하지 않습니다.
보통 브라우저 콘솔(F12)에서 이를 확인할 수 있습니다.

아래와 같은 코드를 원하시는 것 같습니다:

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

또는 원시 HTML을 사용하는 경우:

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

이 h 헬퍼가 어떻게 작동하는지 설명하는 이 게시물을 읽을 수 있습니다.

요약된 콘텐츠(cooked content) 앞에 HTML을 추가하려면 다음을 수행할 수 있습니다:

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

@Arkshine님, 감사합니다. 정말 많은 도움이 되었습니다!

기타 언급된 배너들과 마찬가지로 텍스트를 위에 표시하고 싶었기 때문에 다음 코드를 사용했습니다.

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

감사합니다!