السماح للمستخدمين بإخفاء الإعجابات على المنشورات عبر تفضيل المستخدم أو حقل المستخدم

كان هناك نقاش كبير مؤخرًا على منتدى أديره حول ما إذا كان يجب إزالة خاصية الإعجاب أم لا. نصف الأعضاء يريدون إزالتها، بينما يريد النصف الآخر إبقائها. لقد وجدت مكون السمة الذي يخفي إمكانية الإعجاب بالمنشورات للمستخدمين من المستوى 0 (TL0) والمستخدمين المجهولين، وقمت بتكييفه إلى حد كبير لاحتياجاتنا، غير أنني لست متأكدًا من كيفية ربطه بحقل منطقي (boolean) خاص بالمستخدم أنشأته (“تبديل الإعجاب”). في مكون السمة الأصلي، يُستخدم شيء مثل “settings.hide_for_anon_user” ويتم إنشاء إعداد سمة في ملف settings.yml يُدعى “hide_for_anon_user”، ولكن لا يمكن تبديل هذا الإعداد إلا بواسطة المشرف وليس على مستوى المستخدم.

كيف يمكنني الرجوع إلى الحقل المخصص لهذا الغرض؟ لقد أضفته بالفعل إلى public_user_custom_fields، لكنني لا أعرف كيفية الرجوع إليه في ملف JavaScript الخاص بالمكون. لقد جربت 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.