允许用户通过用户偏好设置或用户字段隐藏帖子的点赞数

最近,在我管理的一个论坛上,关于是否应该移除“点赞”功能引发了热烈讨论。一半人希望移除,另一半人则希望保留。我找到了一个主题组件,它可以隐藏 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 个赞

看来这会在用户未登录时隐藏帖子。我不确定如何修改代码——有人有什么建议吗?

这似乎可以工作。如果有更简洁的实现方式,欢迎告诉我。

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