villain
(villain)
1
最近、私が管理しているフォーラムで、「いいね」機能を削除するかどうかについて大きな議論がありました。半分の人は削除を望み、もう半分の人は残すことを望んでいます。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
pfaffman
(Jay Pfaffman)
2
いいねを非表示にするために、tl0 が行っているように「いいねなし」グループを作成して活用できると思います。グループ設定は、誰でも参加できるようにしてください。
「いいね!」 1
villain
(villain)
3
しかし、この場合、グループをどのように参照すればよいのでしょうか?
this.currentUser.trust_level === 0; を
this.currentUser.no_likes;
に置き換えてみましたが、うまくいきませんでした。やはり、カスタムグループの参照方法が明確に示されておらず、ユーザーフィールドと同様に、どのドキュメントにもはっきりと記載されていないようです。
villain
(villain)
4
これはカスタムユーザーグループに対して機能しているようです:
<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
villain
(villain)
5
どうやら、ログアウト状態のユーザーには投稿が非表示になっているようです。コードの修正方法がわからないのですが、何かご提案はありますか?
villain
(villain)
6
<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>
これで動作しているようです。もしよりクリーンな実装方法があれば、ご教示ください。
system
(system)
クローズされました:
7
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.