من الناحية المثالية، عند تخصيص Discourse عبر السمات/الإضافات، يجب عليك استخدام CSS أو واجهة برمجة تطبيقات إضافات JavaScript أو منافذ الإضافات. إذا لم ينجح أي من هذه الخيارات لحالة الاستخدام الخاصة بك، فلا تتردد في فتح طلب سحب (PR) إلى نواة Discourse أو بدء موضوع Dev هنا على Meta. يسعدنا دائمًا مناقشة إضافة منافذ/واجهات برمجة تطبيقات جديدة لتسهيل التخصيص.
إذا استنفدت جميع الخيارات الأخرى، فقد تحتاج إلى اللجوء إلى تجاوزات القوالب. تتيح لك هذه التقنية تجاوز القالب بأكمله لأي مكون Ember أو مسار من السمة/الإضافة الخاصة بك.
هذه ليست طريقة موصى بها لتخصيص Discourse. التغييرات اليومية في نواة Discourse ستتعارض مع تجاوز القالب الخاص بك في نهاية المطاف، مما قد يتسبب في حدوث أخطاء كارثية عند عرض المنتدى.
إذا قررت اتباع هذا النهج، فتأكد من أن لديك اختبارات آلية وعمليات ضمان جودة كافية لاكتشاف التراجعات. إذا قمت بتوزيع سمة/إضافة مع تجاوزات للقوالب، فيرجى التأكد من أن مسؤولي المنتدى على دراية بمخاطر الاستقرار التي تحملها السمة/الإضافة الخاصة بك.
![]()
![]()
تحديث أكتوبر 2023: بالنسبة للميزات الجديدة، يتجه Discourse بشكل متزايد نحو استخدام المكونات التي تم إنشاؤها باستخدام تنسيق ملف
.gjsالخاص بـ Ember. يتم تعريف قوالب هذه المكونات ضمنيًا، ولا يمكن تجاوزها بواسطة السمات/الإضافات.للمضي قدمًا، يجب إجراء جميع تخصيصات القوالب باستخدام منافذ الإضافات
أتفهم أن هذا سيتعطل في المستقبل القريب، اعرض لي الوثائق على أي حال
تجاوز قوالب المكونات
لتجاوز قالب مكون Ember (أي أي شيء تحت components/* في نواة Discourse)، يجب عليك إنشاء ملف .hbs بنفس الاسم في السمة/الإضافة الخاصة بك. على سبيل المثال، لتجاوز قالب المكون badge-button في نواة Discourse، ستقوم بإنشاء ملف قالب في السمة/الإضافة الخاصة بك في هذا الموقع:
{theme}/javascripts/discourse/templates/components/badge-button.hbs
{plugin}/assets/javascripts/discourse/templates/components/badge-button.hbs
يجب أن يكون التجاوز دائمًا متداخلاً داخل الدليل /templates، حتى لو كان مكون النواة يحتوي على قالب “موضوع في نفس المكان”.
تجاوز قوالب المسارات
يعمل تجاوز قوالب المسارات (أي جميع القوالب غير المكونة تحت templates/*) بنفس طريقة عمل المكونات. قم بإنشاء قالب بنفس الاسم في السمة/الإضافة الخاصة بك. على سبيل المثال، لتجاوز discovery.hbs في النواة، يمكنك إنشاء ملف مثل
{theme}/javascripts/discourse/templates/discovery.hbs
{plugin}/assets/javascripts/discourse/templates/discovery.hbs
تجاوز القوالب “الخام” (.hbr)
سيتم قريبًا استبدال نظام القوالب “الخام” الخاص بـ Discourse بمكونات Ember العادية. ولكن في غضون ذلك، يعمل تجاوز القوالب الخام بنفس طريقة عمل قوالب Ember. على سبيل المثال، لتجاوز topic-list-item.hbr في النواة، يمكنك إنشاء ملف مثل:
{theme}/javascripts/discourse/templates/list/topic-list-item.hbr
{plugin}/assets/javascripts/discourse/templates/list/topic-list-item.hbr
التفاعل بين السمات / الإضافات المتعددة
إذا قامت العديد من السمات/الإضافات المثبتة بتجاوز نفس القالب، فإن “الفائز” هو الذي لديه أدنى ترتيب مرقم في هذه القائمة:
- تجاوزات السمات (أعلى ‘معرف’ للسمة يفوز)
- تجاوزات الإضافات (أحدث اسم أبجدي للإضافة يفوز)
- النواة
يعني هذا التقديم أيضًا أنه يمكنك تجاوز قوالب الإضافات من السمات. من الناحية الفنية، يمكنك أيضًا تجاوز قوالب السمات من سمات أخرى، وقوالب الإضافات من إضافات أخرى، ولكن السلوك قد يكون مفاجئًا بسبب الاعتماد على اسم الإضافة ومعرف السمة.
كيف يعمل هذا؟
يقوم Discourse بتجميع وتحديد أولوية القوالب في الفئة DiscourseTemplateMap. بالنسبة للقوالب المكونة المتواجدة في نفس المكان، يتم استخدام تلك المعلومات أثناء تهيئة التطبيق لاستبدال ارتباطات قوالب النواة. بالنسبة لجميع القوالب الأخرى، يتم استخدام الخريطة بواسطة المحلل في وقت التشغيل لجلب القالب الصحيح.
يتم التحكم في إصدار هذه الوثيقة - اقترح تغييرات على github.