العمل مع قوالب .erb في مكون إضافي

لقد كنت أقدم بعض النصائح حول كيفية العمل مع قوالب .erb في Discourse مؤخرًا ولاحظت عدم وجود الكثير من التفاصيل حول هذا الموضوع هنا في meta، لذلك فكرت في بدء هذه المقالة الموسعة حول الموضوع. تفترض هذه المقالة الموسعة أنك تعرف ما هي قوالب .erb وما هي وظيفتها في Discourse، وفي Rails بشكل أوسع. إذا كنت تريد المزيد من التفاصيل حول هذه الخلفية، فيرجى قراءة هذا أولاً.

منافذ الإضافات الخادمية (Server plugin outlets)

تعمل منافذ الإضافات الخادمية بطريقة مشابهة لـ منافذ الإضافات العميلية، على الرغم من وجود عدد قليل منها فقط. تسمح لك بإدراج قالب .erb الخاص بك في قالب discourse/discourse .erb. يتم تعريفها كالتالي:

<%= server_plugin_outlet [name] %>

كمثال، انظر إلى استخدام منفذ unsubscribe_options في إضافة الدردشة:

منشئات HTML (HTML builders)

تم تصميم منشئات HTML لـ HTML القياسي الذي يتم بناؤه ديناميكيًا، بدلاً من استخدام القوالب ومنافذ الإضافات. لاستخدام منشئات HTML في قوالب .erb، ابحث عن نقاط الإدراج هذه:

<%= build_plugin_html [name] %>

يمكنك إدراج HTML في هذه النقاط عن طريق إعادته إلى كتلة register_html_builder في ملف plugin.rb الخاص بك، أي:

register_html_builder([name]) do |controller|
   ## بناء وإرجاع HTML المخصص الخاص بك
end

كمثال، انظر إلى استخدام server:before-head-close-crawler في إضافة solved:

يمكنك في الواقع تسجيل منشئات HTML لإضافة HTML من جانب العميل أيضًا، ومع ذلك، لا يُنصح بذلك. أضف HTML من جانب العميل باستخدام منافذ الإضافات والقوالب من جانب العميل.

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

تجاوز قالب (Overriding a template)

يمكنك تجاوز قوالب .erb من إضافة عن طريق إضافة طرق عرض إضافتك إلى view_paths لوحدة التحكم. هذا مجرد Rails، وليس خاصًا بـ Discourse. كيفية عمل هذا مغطاة في أدلة Rails هنا:

على سبيل المثال، إذا كنت تريد تجاوز app/views/email/unsubscribed.html.erb، فيجب عليك القيام بأمرين:

هيكلة طرق عرض إضافتك باستخدام نفس مساحة الاسم

يجب أن يكون قالبك هنا:

your-plugin-folder/app/views/email/unsubscribed.html.erb

إضافة مسار طرق عرض إضافتك إلى وحدة التحكم ذات الصلة

في هذه الحالة، وحدة التحكم ذات الصلة هي EmailController. أضف ما يلي إلى ملف plugin.rb الخاص بك:

EmailController.prepend_view_path File.expand_path("../views", __FILE__)

يمكنك إضافة طرق عرض إضافتك إلى مسارات طرق العرض العامة، ومع ذلك، لا حاجة لذلك في معظم الحالات.

8 إعجابات