사용자 설정 또는 사용자 필드를 통해 게시물의 좋아요를 숨길 수 있도록 허용

최근 제가 관리하는 포럼에서 ‘좋아요(Likes)’ 기능을 제거할지 말지에 대해 큰 논쟁이 있었습니다. 절반은 기능을 없애길 원하고, 나머지 절반은 유지하길 원합니다. 저는 TL0(미로그인) 및 익명 사용자에게 게시글 좋아요 기능을 숨기는 테마 컴포넌트를 찾았고, 이를 우리의 용도에 맞게 대부분 수정했습니다. 다만, 제가 생성한 사용자 필드 보oleans(“toggle likes”)와 어떻게 연결해야 할지 확실하지 않습니다. 원래 테마 컴포넌트에서는 "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>

하지만 사람들이 그룹에 가입하도록 하는 대신 커스텀 사용자 필드 불리언 값을 확인하는 방식으로 처리할 수 있는지 확인해 보고 싶습니다. 어떻게 해야 하는지 아이디어를 얻기 위해 다른 플러그인들을 살펴보고 있지만, 지금까지 시도한 모든 것이 작동하지 않았습니다.

ETA: 이것은 작동하는 것 같습니다. 다만 사용자 필드 불리언 값을 체크하거나 해제한 후 새로고침을 해야 합니다.

<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.