投稿の「いいね」をユーザー設定またはユーザーフィールドで非表示にする機能

最近、私が管理しているフォーラムで、「いいね」機能を削除するかどうかについて大きな議論がありました。半分の人は削除を望み、もう半分の人は残すことを望んでいます。TL0 と匿名ユーザーの「いいね」機能を非表示にするテーマコンポーネントを見つけ、それを当社の用途に合わせてほぼ適用しました。しかし、私が作成したユーザーフィールドのブール値(「いいね」の切り替え)とそれをどう連携させるかについて確信が持てません。元のテーマコンポーネントでは「settings.hide_for_anon_user」のようなものが使われており、settings.yml に「hide_for_anon_user」というテーマ設定が作成されますが、これは管理者のみが切り替えることができ、ユーザーレベルでは切り替えられません。

このカスタムフィールドを参照するにはどうすればよいでしょうか?すでに public_user_custom_fields に追加済みですが、コンポーネントの JS ファイル内でどのように参照すればよいかわかりません。userCustomFields.user_field_10、settings.current_user.custom_fields.user_field_10、current_user.custom_fields.user_field_10 を試してみましたが、どれも機能せず、スレッド内のすべての投稿が非表示になってしまいます。

何かお手伝いできることがあれば、大変ありがたく存じます。

「いいね!」 2

いいねを非表示にするために、tl0 が行っているように「いいねなし」グループを作成して活用できると思います。グループ設定は、誰でも参加できるようにしてください。

「いいね!」 1

しかし、この場合、グループをどのように参照すればよいのでしょうか?

this.currentUser.trust_level === 0;
this.currentUser.no_likes;
に置き換えてみましたが、うまくいきませんでした。やはり、カスタムグループの参照方法が明確に示されておらず、ユーザーフィールドと同様に、どのドキュメントにもはっきりと記載されていないようです。

これはカスタムユーザーグループに対して機能しているようです:

<script type="text/discourse-plugin" version="0.8">
api.reopenWidget("post-menu", {
    menuItems() {
        const user = Discourse.User.current();
        if(user.primary_group_name.toLowerCase() === "no_likes") {
            return this.siteSettings.post_menu
                .split("|")
                .filter((item) => item !== "like");
        }
        return this.siteSettings.post_menu.split("|").filter(Boolean);
    },
});
</script>

ただし、グループへの参加を促す代わりに、カスタムユーザーフィールドのブール値をチェックする方法があれば試してみたいと考えています。他のプラグインを調べて実装方法を検討しましたが、これまでのところ試したものはすべて機能しませんでした。

追記:これは機能しているようですが、ユーザーフィールドのブール値のチェックまたは解除後にページを再読み込みする必要があります。

<script type="text/discourse-plugin" version="0.8">
api.reopenWidget("post-menu", {
    menuItems() {
        const user = Discourse.User.current();
        if(user.custom_fields['user_field_10']) {
            return this.siteSettings.post_menu
                .split("|")
                .filter((item) => item !== "like");
        }
        return this.siteSettings.post_menu.split("|").filter(Boolean);
    },
});
</script>
「いいね!」 2

どうやら、ログアウト状態のユーザーには投稿が非表示になっているようです。コードの修正方法がわからないのですが、何かご提案はありますか?

<script type="text/discourse-plugin" version="0.8">
    api.reopenWidget("post-menu", {
        menuItems() {
            const user = Discourse.User.current();
            if (api.getCurrentUser() == null || user.custom_fields['user_field_10'])  {
                return this.siteSettings.post_menu
                    .split("|")
                    .filter((item) => item !== "like");
            }
            return this.siteSettings.post_menu.split("|").filter(Boolean);
        },
    });
</script>

これで動作しているようです。もしよりクリーンな実装方法があれば、ご教示ください。

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