안녕하세요,
특정 카테고리에 면책 조항(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)
}
});
감사합니다!