Sto cercando di creare un plugin che modifichi l’intestazione in qualcosa di simile a questo
Non è importante come appaia esattamente, ciò che conta è che non voglio utilizzare la personalizzazione nel percorso
/admin/customize/css_html. Voglio creare un plugin che modifichi magicamente tutto ciò di cui ho bisogno.
Finora ho scoperto che non esiste un template per l’intestazione, poiché viene renderizzata tramite virtual-dom.
Il processo di rendering è il seguente:
-
Il template
assets/javascripts/discourse/templates/application.hbs, che può essere sovrascritto, renderizza il componentesite-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”}} -
Il componente
assets/javascripts/discourse/components/site-header.js.es6estende e restituisce il widgetheader.const SiteHeaderComponent = MountWidget.extend(Docking, {
widget: ‘header’,
..
});export default SiteHeaderComponent;
-
Il widget
assets/javascripts/discourse/widgets/header.js.es6genera il virtual-dom per l’intestazione.export default createWidget(‘header’, {
tagName: ‘header.d-header.clearfix’,html(attrs, state) {}
});
Le mie riflessioni
Potrei creare il mio widget my-header che estende il header esistente; lì aggiornerei semplicemente l’HTML. Non voglio copiare e incollare nulla al suo interno, ma solo sovrascrivere il metodo html().
/plugins/discourse-foo/assets/javascripts/discourse/widgets/my-header.js.es6
Poi potrei creare il mio componente my-site-header che estende il site-header esistente, sovrascrivendolo semplicemente per puntare al widget my-header.
/plugins/discourse-foo/assets/javascripts/discourse/components/my-site-header.js.es6
Infine, sovrascriverei il template application per mostrare il componente my-site-header al posto di 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"}}
La domanda è: come posso estendere tutti questi componenti e widget? Potreste indicarmi il modo corretto per farlo? Grazie.
