(غير موصى به) تجاوز قوالب Discourse من سمة أو إضافة

من الناحية المثالية، عند تخصيص Discourse عبر السمات/الإضافات، يجب عليك استخدام CSS أو واجهة برمجة تطبيقات إضافات JavaScript أو منافذ الإضافات. إذا لم ينجح أي من هذه الخيارات لحالة الاستخدام الخاصة بك، فلا تتردد في فتح طلب سحب (PR) إلى نواة Discourse أو بدء موضوع Dev هنا على Meta. يسعدنا دائمًا مناقشة إضافة منافذ/واجهات برمجة تطبيقات جديدة لتسهيل التخصيص.

إذا استنفدت جميع الخيارات الأخرى، فقد تحتاج إلى اللجوء إلى تجاوزات القوالب. تتيح لك هذه التقنية تجاوز القالب بأكمله لأي مكون Ember أو مسار من السمة/الإضافة الخاصة بك.

:rotating_light: هذه ليست طريقة موصى بها لتخصيص Discourse. التغييرات اليومية في نواة Discourse ستتعارض مع تجاوز القالب الخاص بك في نهاية المطاف، مما قد يتسبب في حدوث أخطاء كارثية عند عرض المنتدى.

إذا قررت اتباع هذا النهج، فتأكد من أن لديك اختبارات آلية وعمليات ضمان جودة كافية لاكتشاف التراجعات. إذا قمت بتوزيع سمة/إضافة مع تجاوزات للقوالب، فيرجى التأكد من أن مسؤولي المنتدى على دراية بمخاطر الاستقرار التي تحملها السمة/الإضافة الخاصة بك.

:rotating_light: :rotating_light: :rotating_light: تحديث أكتوبر 2023: بالنسبة للميزات الجديدة، يتجه Discourse بشكل متزايد نحو استخدام المكونات التي تم إنشاؤها باستخدام تنسيق ملف .gjs الخاص بـ Ember. يتم تعريف قوالب هذه المكونات ضمنيًا، ولا يمكن تجاوزها بواسطة السمات/الإضافات.

للمضي قدمًا، يجب إجراء جميع تخصيصات القوالب باستخدام منافذ الإضافات

أتفهم أن هذا سيتعطل في المستقبل القريب، اعرض لي الوثائق على أي حال

تجاوز قوالب المكونات

لتجاوز قالب مكون Ember (أي أي شيء تحت components/* في نواة Discourse)، يجب عليك إنشاء ملف .hbs بنفس الاسم في السمة/الإضافة الخاصة بك. على سبيل المثال، لتجاوز قالب المكون badge-button في نواة Discourse، ستقوم بإنشاء ملف قالب في السمة/الإضافة الخاصة بك في هذا الموقع:

:art: {theme}/javascripts/discourse/templates/components/badge-button.hbs

:electric_plug: {plugin}/assets/javascripts/discourse/templates/components/badge-button.hbs

يجب أن يكون التجاوز دائمًا متداخلاً داخل الدليل /templates، حتى لو كان مكون النواة يحتوي على قالب “موضوع في نفس المكان”.

تجاوز قوالب المسارات

يعمل تجاوز قوالب المسارات (أي جميع القوالب غير المكونة تحت templates/*) بنفس طريقة عمل المكونات. قم بإنشاء قالب بنفس الاسم في السمة/الإضافة الخاصة بك. على سبيل المثال، لتجاوز discovery.hbs في النواة، يمكنك إنشاء ملف مثل

:art: {theme}/javascripts/discourse/templates/discovery.hbs

:electric_plug: {plugin}/assets/javascripts/discourse/templates/discovery.hbs

تجاوز القوالب “الخام” (.hbr)

سيتم قريبًا استبدال نظام القوالب “الخام” الخاص بـ Discourse بمكونات Ember العادية. ولكن في غضون ذلك، يعمل تجاوز القوالب الخام بنفس طريقة عمل قوالب Ember. على سبيل المثال، لتجاوز topic-list-item.hbr في النواة، يمكنك إنشاء ملف مثل:

:art: {theme}/javascripts/discourse/templates/list/topic-list-item.hbr

:electric_plug: {plugin}/assets/javascripts/discourse/templates/list/topic-list-item.hbr

التفاعل بين السمات / الإضافات المتعددة

إذا قامت العديد من السمات/الإضافات المثبتة بتجاوز نفس القالب، فإن “الفائز” هو الذي لديه أدنى ترتيب مرقم في هذه القائمة:

  1. تجاوزات السمات (أعلى ‘معرف’ للسمة يفوز)
  2. تجاوزات الإضافات (أحدث اسم أبجدي للإضافة يفوز)
  3. النواة

يعني هذا التقديم أيضًا أنه يمكنك تجاوز قوالب الإضافات من السمات. من الناحية الفنية، يمكنك أيضًا تجاوز قوالب السمات من سمات أخرى، وقوالب الإضافات من إضافات أخرى، ولكن السلوك قد يكون مفاجئًا بسبب الاعتماد على اسم الإضافة ومعرف السمة.

كيف يعمل هذا؟

يقوم Discourse بتجميع وتحديد أولوية القوالب في الفئة DiscourseTemplateMap. بالنسبة للقوالب المكونة المتواجدة في نفس المكان، يتم استخدام تلك المعلومات أثناء تهيئة التطبيق لاستبدال ارتباطات قوالب النواة. بالنسبة لجميع القوالب الأخرى، يتم استخدام الخريطة بواسطة المحلل في وقت التشغيل لجلب القالب الصحيح.


يتم التحكم في إصدار هذه الوثيقة - اقترح تغييرات على github.

17 إعجابًا

وماذا عن قوالب الجوال؟ ما هو هيكل الدليل لإعادة كتابة القوالب من النواة؟

يجب أن يعمل بنفس الطريقة تمامًا - أنت تطابق اسم القالب الأساسي. لذا إذا كان يحتوي على /mobile، فقم بتضمين ذلك في تجاوزك.

أحاول إعادة كتابة قالب تسجيل الدخول للجوال login.hbs ولا يعمل Imgur: The magic of the Internet هل أنا على المسار الصحيح؟

المسار الكامل غير مرئي في لقطة الشاشة الخاصة بك على حد علمي. هل يمكنك لصقه هنا كنص.

themeroot/javascripts/mobile/modal/login.hbs

أنت تفتقد discourse/templates من مسارك

لذلك في حالتك، سيكون {theme}/javascripts/discourse/templates/mobile/modal/login.hbs

إعجابَين (2)

هل هذا لا يزال هو الحال؟

أنا حزين بعض الشيء لإزالة القدرة على تجاوز الكثير من التعليمات البرمجية.

من المنطقي استبدال نظام الأدوات (Widgets) المخصص، إلى حد ما، ولكنه منحنا القدرة على الربط بالتعليمات البرمجية الموجودة على مستويات متعددة، مما قلل من الكثير من مخاطر التغيير المكسور حيث يمكننا استهداف كتل صغيرة فقط بطرق ذكية تسمح لنا بما يلي:

  • إضافة ميزات
  • عدم إزعاج أي شيء آخر.

لقد اضطررت للتو إلى إزالة ميزتين هامتين من Discourse Journal، على سبيل المثال، والتي كانت تستند إلى تجاوزات دقيقة للأدوات لأن الطريقة الوحيدة لإعادة إنشائها في Glimmer هي عبر زوج من تجاوزات القوالب (بما في ذلك محاولة تغيير ملف .gjs) وهو ما لم يعد مدعومًا على ما يبدو.

حتى لو كان هذا مدعومًا، فسنترك مع تجاوز أجزاء أكبر من التعليمات البرمجية مقارنة بإطار الأدوات، مع زيادة مرتبطة في مخاطر تعارض تغييرات النواة مع التجاوزات.

هذا ليس صحيًا لقابلية توسيع المنصة.

هل يمكن فعل أي شيء حيال ذلك؟

7 إعجابات

نعم، أسمعك - كانت هناك بعض الأشياء الجيدة في واجهات برمجة تطبيقات قابلية توسيع الأدوات.

لكن على الجانب الآخر، كان من الصعب للغاية علينا تعديل أي واجهة مستخدم قائمة على الأدوات في النواة، لأننا لا نعرف ما هي الطرق/الزخارف العشوائية التي قد يقدمها الأشخاص. لهذا السبب بدت تخصيصات الأدوات مستقرة نسبيًا - كنا خائفين جدًا من لمس تطبيقات النواة.

حلنا لهذا المضي قدمًا هو منافذ توصيل الأدوات المساعدة. تسمح هذه الأدوات للقوالب والإضافات بتجاوز أجزاء صغيرة جدًا من القوالب اختياريًا بتنفيذها الخاص.

على سبيل المثال، انظر كيف يقوم الدردشة بشكل شرطي بتجاوز شعار الصفحة الرئيسية باستخدام مكون مخصص. يعمل هذا مع رأس الأدوات الحالي، ورأس Glimmer الجديد (قريبًا! :tm:).

نحن سعداء بشكل عام بقبول طلبات السحب لإضافة منافذ توصيل أدوات مساعدة جديدة في أماكن مختلفة. إذا كنت غير متأكد من حالة استخدام معينة، فلا تتردد في فتح موضوع Dev مع التفاصيل!

10 إعجابات

حسنًا، هذا يبدو طريقًا للمضي قدمًا، شكرًا لك.

سأحتاج إلى استيعاب تداعيات ذلك والتكيف مع استراتيجية تتماشى مع ذلك.

أقدر الرد!

6 إعجابات