Ich versuche, ein Plugin zu erstellen, das den Header so verändert:
Es ist nicht wirklich wichtig, wie es aussieht. Wichtig ist, dass ich keine Anpassungen über den Pfad
/admin/customize/css_html vornehmen möchte. Ich möchte ein Plugin erstellen, das alles, was ich brauche, magisch verändert.
Bisher habe ich herausgefunden, dass es keine Vorlage für den Header gibt; er wird über Virtual-DOM gerendert.
Die Renderweise ist folgende:
-
Die Vorlage
assets/javascripts/discourse/templates/application.hbs, die überschrieben werden kann, rendert die Komponentesite-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”}} -
Die Komponente
assets/javascripts/discourse/components/site-header.js.es6erweitert und gibt das Widgetheaderzurück.const SiteHeaderComponent = MountWidget.extend(Docking, {
widget: ‘header’,
..
});export default SiteHeaderComponent;
-
Das Widget
assets/javascripts/discourse/widgets/header.js.es6generiert Virtual-DOM für den Header.export default createWidget(‘header’, {
tagName: ‘header.d-header.clearfix’,html(attrs, state) {}
});
Meine Überlegungen
Ich kann mein eigenes Widget my-header erstellen, das das bestehende header erweitert. Dort werde ich einfach die html()-Methode aktualisieren. Ich möchte nichts kopieren und einfügen, sondern lediglich die html()-Methode überschreiben.
/plugins/discourse-foo/assets/javascripts/discourse/widgets/my-header.js.es6
Dann kann ich meine eigene Komponente my-site-header erstellen, die die bestehende site-header erweitert, indem sie einfach auf das my-header-Widget verweist.
/plugins/discourse-foo/assets/javascripts/discourse/components/my-site-header.js.es6
Anschließend überschreibe ich die Vorlage application, um die Komponente my-site-header anstelle von site-header anzuzeigen.
/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"}}
Die Frage ist: Wie kann ich all diese Komponenten und Widgets erweitern? Könntest du mich bitte auf den richtigen Weg weisen? Danke.
