Я пытаюсь создать плагин, который изменит заголовок примерно вот так:
Внешний вид не так важен; главное — я не хочу использовать кастомизацию через путь
/admin/customize/css_html. Я хочу создать плагин, который магическим образом изменит всё необходимое.
Из того, что я пока обнаружил, следует, что для заголовка нет шаблона; он рендерится через виртуальный 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расширяет и возвращает виджетheader.const SiteHeaderComponent = MountWidget.extend(Docking, {
widget: ‘header’,
..
});export default SiteHeaderComponent;
-
Виджет
assets/javascripts/discourse/widgets/header.js.es6генерирует виртуальный DOM для заголовка.export default createWidget(‘header’, {
tagName: ‘header.d-header.clearfix’,html(attrs, state) {}
});
Мои мысли
Я могу создать свой собственный виджет my-header, который будет расширять существующий header; там я просто обновлю метод html. Я не хочу ничего копировать туда; я хочу просто переопределить метод html().
/plugins/discourse-foo/assets/javascripts/discourse/widgets/my-header.js.es6
Затем я могу создать свой собственный компонент my-site-header, который будет расширять существующий site-header, просто переопределив его так, чтобы он указывал на виджет 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"}}
Вопрос в том, как можно расширить все эти компоненты и виджеты? Не могли бы вы указать мне правильный путь для этого? Спасибо.
