أحاول إنشاء إضافة ستغير الرأس إلى شيء مثل هذا
لا يهم حقًا كيف يبدو الشكل، المهم أنني لا أريد استخدام التخصيص في مسار
/admin/customize/css_html. أريد إنشاء إضافة ستقوم بتغيير كل ما أحتاجه سحرًا.
ما توصلت إليه حتى الآن هو أنه لا يوجد قالب للرأس، بل يتم عرضه عبر virtual-dom.
طريقة العرض هي كالتالي:
-
قالب
assets/javascripts/discourse/templates/application.hbs، الذي يمكن تحميله، يعرض مكونsite-header.{{plugin-outlet “above-site-header”}}
{{site-header canSignUp=canSignUp
showCreateAccount=“showCreateAccount”
showLogin=“showLogin”
showKeyboard=“showKeyboardShortcutsHelp”
toggleMobileView=“toggleMobileView”
toggleAnonymous=“toggleAnonymous”
logout=“logout”}}
{{plugin-outlet “below-site-header”}} -
المكون
assets/javascripts/discourse/components/site-header.js.es6يمتد ويعيد widgetheader.const SiteHeaderComponent = MountWidget.extend(Docking, {
widget: ‘header’,
..
});export default SiteHeaderComponent;
-
الـ widget
assets/javascripts/discourse/widgets/header.js.es6يولد virtual-dom للرأس.export default createWidget(‘header’, {
tagName: ‘header.d-header.clearfix’,html(attrs, state) {}
});
أفكاري
يمكنني إنشاء widget خاص بي باسم my-header سيمتد من header الحالي، وسأقوم هناك فقط بتحديث html. لا أريد نسخ أي شيء ولصقه، أريد فقط تجاوز دالة html().
/plugins/discourse-foo/assets/javascripts/discourse/widgets/my-header.js.es6
ثم يمكنني إنشاء مكون خاص بي باسم my-site-header سيمتد من site-header الحالي مع تجاوز بسيط ليوجه إلى widget my-header.
/plugins/discourse-foo/assets/javascripts/discourse/components/my-site-header.js.es6
ثم أقوم بتجاوز قالب application لعرض مكون my-site-header بدلاً من site-header
/plugins/discourse-foo/assets/javascripts/discourse/templates/application.hbs
{{plugin-outlet "above-site-header"}}
{{my-site-header canSignUp=canSignUp
showCreateAccount="showCreateAccount"
showLogin="showLogin"
showKeyboard="showKeyboardShortcutsHelp"
toggleMobileView="toggleMobileView"
toggleAnonymous="toggleAnonymous"
logout="logout"}}
{{plugin-outlet "below-site-header"}}
السؤال هو، كيف يمكنني توسيع كل هذه المكونات والـ widgets؟ هل يمكنك من فضلك إرشادي إلى الطريقة الصحيحة للقيام بذلك؟ شكرًا.
