ماذا تود أن يتم؟
أحتاج إلى زر في القائمة العلوية يشبه زر posted، يُظهر جميع المنشورات التي أنشأتها أنت، لكنه لا يتضمن مواضيع المستخدمين الآخرين التي أجبت عليها (كما يفعل زر posted).
سيكون من الرائع لو أمكن إعادة تسميته إلى ‘صوري’ في بعض التصنيفات أيضًا.
يجب أن يعمل هذا مع إضافة معاينة المواضيع (Topic Previews plugin) بحيث تظهر النتائج مع صور مصغرة، وهو ما يعمل بالفعل مع الكود أدناه.
متى تحتاج إلى أن يتم ذلك؟
ليس هناك عجلة، لكن سيكون من الجيد إنجازه خلال شهر.
ما هو ميزانيتك، بالدولار الأمريكي، التي يمكنك تقديمها لهذه المهمة؟
آمل أن يكون الكود أدناه نقطة انطلاق (وهو مخصص لزر يعرض المنشورات التي لا تحتوي على ردود)، وأن تكون المهمة سهلة نسبيًا، لذا سأقدم مبلغ 100 دولار.
أكبر مشكلة أواجهها عند محاولة تعديل الكود بنفسي هي أنني لا أستطيع إيجاد طريقة لاستخدام متغير اسم المستخدم في استعلام البحث، بحيث تظهر فقط مواضيع المستخدم الحالي.
<!-- NEEDS REPLY -->
<script type="text/discourse-plugin" version="0.8.18">
if (I18n.translations.en) {
I18n.translations.en.js.filters.needsreply = {title: "لا توجد ردود", help: "مواضيع بدون ردود"};
}
// قم بتخصيص هذه القيم
// تعيين استعلام البحث
let search_query = '?max_posts=1';
// استبعاد بعض التصنيفات من إظهار عنصر قائمة "يحتاج إلى رد"
let excludeList = ['classifieds', 'workshops', 'staff', 'wiki','site-discussions', 'site-feedback', 'announcements', 'site-tips', 'site-support'];
// إضافة فئة نشطة إلى زر "يحتاج إلى رد"
api.modifyClass('component:navigation-item', {
active: Ember.computed("contentFilterMode", "filterMode", function () {
let contentFilterMode = this.get('content').get('filterMode');
if (window.location.search && window.location.search.split('&')[0] === search_query.split('&')[0]) {
return contentFilterMode === "needsreply";
} else {
return this._super(contentFilterMode, this.get('filterMode'));
}
}),
});
// إزالة فلتر max_posts وفلتر الوسوم
api.modifyClass('controller:discovery/topics', {
resetParams: function () {
this.setProperties({max_posts: null});
this.setProperties({tags: null});
this._super();
}
});
Discourse.ExternalNavItem = Discourse.NavItem.extend({
href: function () {
return this.get('href');
}.property("href")
});
Discourse.NavItem.reopenClass({
buildList: function (category, args) {
let list = this._super(category, args),
tag = args.tagId,
needsreplyHref;
if (!category) { // لا يحتوي على تصنيف
needsreplyHref = tag ? '/latest/' + search_query + '&tags=' + tag : '/latest/' + search_query; // إذا وُجد وسم، نبني الرابط مع الوسم، وإلا نعود إلى عرض الأحدث واستعلام البحث
}
else if (excludeList.indexOf(category.slug) != -1) { // التصنيف موجود في قائمة الاستبعاد، لا تفعل شيئًا
return list; // أعد القائمة دون إنشاء عنصر تنقل مخصص
}
else if (!category.parentCategory) { // ليس تصنيفًا فرعيًا
needsreplyHref = tag ? '/c/' + category.slug + search_query + '&tags=' + tag : '/c/' + category.slug + search_query; // إذا وُجد وسم، نبني الرابط مع الوسوم والتصنيف، وإلا نعود إلى استعلام البحث وما إلى ذلك
} else { // تصنيف فرعي
needsreplyHref = tag ? '/c/' + category.parentCategory.slug + '/' + category.slug + search_query + '&tags=' + tag :
'/c/' + category.parentCategory.slug + '/' + category.slug + search_query; // إذا وُجد وسم، نبني الرابط مع الوسوم والتصنيف الفرعي والتصنيف، وإلا نعود إلى استعلام البحث وما إلى ذلك
}
list.push(Discourse.ExternalNavItem.create({href: needsreplyHref, name: 'needsreply'}));
return list;
}
});
</script>