سيتيح هذا تصفية المواضيع التي تم ربطها بحدث عبر إضافة الأحداث (Events plugin)، باستخدام مسار
/filterوإضافة قوائم المواضيع المخصصة (Custom Topic Lists plugin).
المشكلة
إنشاء إضافة أحداث Discourse مواضيع أحداث غنية بالمحتوى، ولكن لا توجد حاليًا طريقة لعزلها عن المواضيع غير المرتبطة بالأحداث باستخدام لغة استعلامات تصفية المواضيع.
جميع الحلول البديلة الحالية لها عيوب:
- يعرض مسار
/upcoming-eventsالأحداث على شكل تقويم، وليس كقائمة مواضيع قابلة للتصفية - على الرغم من أنه ربما يجب أن يكون كذلك!!! - مكوّن السمة تقويم الأحداث في القوائم المخصصة يحتوي على إعداد “عرض فقط المواضيع ذات الأحداث” يعمل على جانب العميل (client-side)، لكنه يعمل بعد تحميل القائمة — فهو ليس مصفاة حقيقية على جانب الخادم (server-side)، ولا يتوافق جيدًا مع ترقيم الصفحات (pagination)، وقد يعمل بشكل غير متسق.
- النهج القائم على الاتفاق (فئات مخصصة، وسوم إلزامية) يتطلب انضباطًا صارمًا في إدارة المحتوى.
الحل المقترح
يجب أن توسّع إضافة الأحداث لغة DSL لتصفية المواضيع بإضافة فلتر event:، اتباعًا للنمط نفسه المستخدم بالفعل في إضافة Solved (status:solved / status:unsolved) وإضافة Assign (?assigned=username).
مثال على الصياغة:
event:yes # مواضيع مرتبطة بحدث
event:no # مواضيع غير مرتبطة بحدث (عبر -event:yes)
-category:announcements event:yes # أحداث خارج فئة الإعلانات
etag:meetup event:yes order:created # مواضيع اجتماعات موسومة ولها أحداث، مرتبة حسب الأحدث
يمكن أيضًا النظر في متغير status:events للحفاظ على الاتساق مع مساحة أسماء status: الموجودة، لكن event: يقرأ بشكل أكثر طبيعية للحالة الأساسية للاستخدام.
لماذا هذه هي الطبقة الصحيحة
تذكر وثائق التصفية صراحةً:
تخزن إضافة الأحداث بالفعل بيانات أحداث منظمة (تاريخ البدء، تاريخ الانتهاء، الحالة، تأكيدات الحضور) في جداول مخصصة. يمكن لفلتر على جانب الخادم الاستعلام عنها بكفاءة — وهو ما لا يستطيع مكوّن على جانب العميل ببساطة القيام به.
مثال على حالة الاستخدام
بصفتي مدير مجتمع، أريد رابطًا قابلًا للمشاركة — يمكن وضعه في شريط جانبي، وتضمينه عبر قوائم المواضيع المخصصة، واستخدامه في مكوّن السمة قوائم المواضيع المصفاة — يعرض بشكل موثوق جميع المواضيع عبر أي فئة مرتبطة بحدث، مرتبة حسب تاريخ الحدث.
اليوم، لا أستطيع بناء ذلك الاستعلام بثقة. مع وجود فلتر event:، يمكنني:
event:yes order:created
…وحصولي على قائمة مواضيع نظيفة، مقسمة إلى صفحات، ومدركة للصلاحيات، لجميع الأحداث في موقعي.