عند تخصيص Discourse عبر السمات/الإضافات، يجب عليك استخدام CSS، وواجهة برمجة تطبيقات JavaScript، أو نقاط خروج الإضافات. إذا لم تنجح أي من هذه الطرق لحالة الاستخدام الخاصة بك، فلا تتردد في فتح طلب سحب إلى 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.hbs
التفاعل بين السمات / الإضافات المتعددة
إذا قامت سمات/إضافات متعددة مثبتة بتجاوز نفس القالب، فإن “الفائز” هو الذي لديه أقل ترتيب مرقم في هذه القائمة:
- تجاوزات السمات (يفوز أعلى “معرف” للسمة)
- تجاوزات الإضافات (يفوز أحدث اسم إضافة أبجديًا)
- الأساسي
يعني هذا الأسبقية أيضًا أنه يمكنك تجاوز قوالب الإضافات من السمات. من الناحية الفنية، يمكنك أيضًا تجاوز قوالب السمات من سمات أخرى، وقوالب الإضافات من إضافات أخرى، ولكن يمكن أن يكون السلوك مفاجئًا بسبب الاعتماد على اسم الإضافة ومعرف السمة.
كيف يعمل هذا؟
يقوم Discourse بتجميع وتحديد أولوية القوالب في فئة DiscourseTemplateMap. بالنسبة لقوالب المكونات الموجودة في نفس المكان، يتم استخدام هذه المعلومات أثناء تهيئة التطبيق لاستبدال ارتباطات القوالب الأساسية. بالنسبة لجميع القوالب الأخرى، يتم استخدام الخريطة بواسطة المحلل في وقت التشغيل لجلب القالب الصحيح.
هذه الوثيقة تخضع للتحكم في الإصدار - اقترح تغييرات على github.