カテゴリ固有の免責事項

こんにちは。

特定のカテゴリに免責事項を追加しようとしました。「バナー」のようなものを表示したかったのです。例えば、
「これはユーザーの最初の投稿です。新しいメンバーをコミュニティに歓迎しましょう!」
または
「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 もあります。

しかし、これを有効にすると、投稿自体が表示されなくなり、コンテンツエリアが空白になってしまいます。

何か助けがあれば幸いです!

「いいね!」 1

ソースでも空白ですか?

こんにちは、おかえりなさい!

空白が表示される場合は、エラーが発生しています。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 ヘルパーがどのように機能するかを説明しているこちらの投稿を読むことができます。

調理済みコンテンツの前に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);
    }
});
「いいね!」 3

@Arkshineさん、ありがとうございました。大変助かりました!

他の言及されたバナーのように、テキストをすべての上に表示したいので、以下のコードを使用しました。

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

よろしくお願いします!

「いいね!」 1

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