بالتأكيد، يمكنك تجربة شيء كهذا في علامة التبويب header لموضوعك/مكونك. تركت بعض التعليقات في المقتطف إذا كنت ترغب في المتابعة. يمكنك حذفها بمجرد أن تكون جاهزًا لاستخدامها.
تنطبق نفس القواعد. إذا كان المستخدم عضوًا في المجموعة وكانت المجموعة تحتوي على رسائل، فسيتم توجيه Discourse إلى صندوق الوارد للمجموعة. بخلاف ذلك، سينتقل المستخدم إلى دليل الأعضاء.
<script type="text/discourse-plugin" version="0.8">
// الجزء الأول: تعديل المسار للروابط في بطاقات المجموعات. هذا يضمن أن
// عنوان الرابط يعكس المكان الذي يؤدي إليه ويتعامل مع فتح الرابط في علامة تبويب جديدة.
const discourseComputed = require("discourse-common/utils/decorators").default;
api.modifyClass("component:group-card-contents", {
// خاصية groupPath تُستخدم لإنشاء href لروابط المجموعة
// في بطاقة المجموعة. دعنا نعدلها
@discourseComputed("group")
groupPath(group) {
// الحصول على القيمة الافتراضية من النواة
let groupURL = this._super(...arguments);
// إذا كان المستخدم يطابق متطلباتنا، قم بتعديل عنوان URL بحيث يؤدي إلى صندوق الوارد
if (group.is_group_user && group.has_messages) {
groupURL = `${groupURL}/messages/`;
}
// إرجاع القيمة الافتراضية أو المعدلة
return groupURL;
}
});
// الجزء الثاني: تعديل التوجيه داخل التطبيق. هذا يضمن أن التنقل العادي داخل التطبيق
// يتم التعامل معه بشكل صحيح ويوجه المستخدم إلى صندوق الوارد للمجموعة إذا استوفى
// المتطلبات
const DiscourseURL = require("discourse/lib/url").default;
const { groupPath } = require("discourse/lib/url");
const { action } = require("@ember/object");
api.modifyClass("controller:user-card", {
// showGroup هنا هو إجراء ينتمي إلى وحدة تحكم user-card.
// هذا هو ما يتم استدعاؤه عند النقر على اسم المجموعة / الصورة الرمزية داخل بطاقات المجموعات
@action
showGroup(group) {
// استدعاء super للتأكد من تحميل الكود من النواة أولاً
this._super(...arguments);
// group path هي وظيفة مساعدة لعنوان URL مدمجة في Discourse
let groupURL = groupPath(group.name);
// إذا كان المستخدم يطابق المتطلبات، قم بتعديل عنوان URL
if (group.is_group_user && group.has_messages) {
groupURL = `${groupURL}/messages/`;
}
// استدعاء routeTo() إما بعنوان URL الافتراضي للمجموعة أو المعدل
DiscourseURL.routeTo(groupURL);
}
});
</script>