J’essaie de créer un plugin qui modifiera l’en-tête pour ressembler à quelque chose comme ceci
Ce n’est pas vraiment important à quoi cela ressemble, ce qui compte, c’est que je ne veux pas utiliser la personnalisation via le chemin
/admin/customize/css_html. Je veux créer un plugin qui changera magiquement tout ce dont j’ai besoin.
Ce que j’ai découvert jusqu’à présent, c’est qu’il n’existe aucun modèle pour l’en-tête ; il est rendu via un virtual-dom.
Le processus de rendu est le suivant :
-
Le modèle
assets/javascripts/discourse/templates/application.hbs, qui peut être surchargé, rend le composantsite-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”}} -
Le composant
assets/javascripts/discourse/components/site-header.js.es6étend et retourne le widgetheader.const SiteHeaderComponent = MountWidget.extend(Docking, {
widget: ‘header’,
..
});export default SiteHeaderComponent;
-
Le widget
assets/javascripts/discourse/widgets/header.js.es6génère le virtual-dom pour l’en-tête.export default createWidget(‘header’, {
tagName: ‘header.d-header.clearfix’,html(attrs, state) {}
});
Mes réflexions
Je peux créer mon propre widget my-header qui étendra le header existant ; là, je mettrai simplement à jour la méthode html. Je ne veux copier-coller rien dedans, je veux juste surcharger la méthode html().
/plugins/discourse-foo/assets/javascripts/discourse/widgets/my-header.js.es6
Ensuite, je peux créer mon propre composant my-site-header qui étendra le site-header existant en le surchargeant simplement pour qu’il pointe vers le widget my-header.
/plugins/discourse-foo/assets/javascripts/discourse/components/my-site-header.js.es6
Ensuite, je surcharge le modèle application pour afficher le composant my-site-header au lieu de 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 question est : comment puis-je étendre tous ces composants et widgets ? Pourriez-vous s’il vous plaît m’indiquer la bonne méthode pour faire cela ? Merci.
