مرحباً، أنا أعمل على إضافة Discourse الأولى لي.
الفكرة
نريد تعديل سلوك روابط الوسوم قليلاً، بحيث عند النقر على وسم في أي مكان داخل Discourse، بدلاً من الانتقال مباشرة إليه، تظهر خياران: رابط الوسم العادي (forum.com/tag/tag-name) أو صفحة خارجية ذات صلة نختارها (something.site.com/some-name). سيظهر هذا الخيار فقط للوسوم الموجودة في القائمة.
ستكون القائمة على شكل مصفوفة Ruby من الكائنات (أو JSON)، ويمكن إما إضافتها مباشرة إلى الإضافة، أو جعلها متاحة عبر عنوان URL. (يبدو أن الخيار الأول أكثر كفاءة من حيث الموارد — يمكننا ببساطة تحديث القائمة وإعادة بناء الإضافة عند حدوث تحديثات، حيث لن تكون هذه التحديثات متكررة جداً.)
# مصفوفة Ruby من الكائنات
array = [
{forum_tag: "discourse", external_slug: "discourse"},
{forum_tag: "dc", external_slug: "discourse"},
{forum_tag: "xenforo", external_slug: "xenforo"},
{forum_tag: "xf", external_slug: "xenforo"}
]
# أو
array.to_json
=> "[{\"forum_tag\":\"discourse\",\"external_slug\":\"discourse\"},{\"forum_tag\":\"dc\",\"external_slug\":\"discourse\"},{\"forum_tag\":\"xenforo\",\"external_slug\":\"xenforo\"},{\"forum_tag\":\"xf\",\"external_slug\":\"xenforo\"}]"
نريد بشكل أساسي خيار العرض كما يحدث عند النقر على عدد replies في صفحة المنتدى الرئيسية:
أفكاري
وجدت طريقتين في واجهة برمجة تطبيقات Discourse تتعلق بالوسوم:
-
addTagsHtmlCallback- في هذه الحالة، سأحتاج إلى تعيينtopic.tagsإلى مصفوفة فارغة مباشرة بعد تعيين قيمتها لمتغير آخر. بهذه الطريقة سأمنع عرضtagsوأتمكن من كتابة كودي المخصص. -
replaceTagRenderer- الثانية تسمح لي بتغيير عرضtag، وهو ما لا يبدو خادعاً مثل الطريقة الأولى.
ومع ذلك، لاحظ أنه في كلتا الحالتين يجب أن أرجع نصًا raw. بناءً على ما وجدته، لا يمكنني كتابة وتجميع قالب Ember يدوياً. بالتأكيد يمكنني مجرد عرض روابط مخصصة وكتابة دالة بسيطة باستخدام jQuery ووضعها في جذر app/assets/javascripts، لكن هذا حل مختلف تماماً مقارنة بكود Discourse.
هل أنا على المسار الصحيح؟ أي مساعدة ستكون محل تقدير كبير.
