Une situation très courante dans laquelle vous vous retrouverez en tant que développeur de thèmes est la nécessité de créer du contenu qui n’apparaît que sur la page d’accueil de votre communauté.
Vous pourriez ajouter du HTML à la section « After Header » de votre thème, qui apparaîtra ensuite sur chaque page. Vous pouvez faire quelques acrobaties en CSS pour masquer cela partout sauf sur la page d’accueil… mais utilisons plutôt un thème Discourse pour créer un composant avec du contenu qui n’est visible que sur votre page d’accueil.
Si vous n’êtes pas familier avec les thèmes Discourse, consultez Beginner's guide to using Discourse Themes et Structure of themes and theme components
Dans votre thème Discourse, vous devrez configurer la structure de répertoires suivante :
javascripts/discourse/components/
javascripts/discourse/connectors/
À partir de là, nous allons créer un composant Ember. Vous pouvez en savoir plus sur les composants Ember dans leur documentation : Ember.js Guides - Guides and Tutorials - Ember Guides
Mais pour l’instant, ce sera un composant simple. Le composant se composera de deux fichiers, l’un contenant la logique et l’autre le modèle.
javascripts/discourse/components/custom-homepage-content.js
import Component from "@glimmer/component";
import { service } from "@ember/service";
import { defaultHomepage } from "discourse/lib/utilities";
export default class CustomHomepageContent extends Component {
@service router;
get isHomepage() {
const { currentRouteName } = this.router;
return currentRouteName === `discovery.${defaultHomepage()}`;
}
}
Ceci crée un getter isHomepage, qui vérifie le service de routage pour le currentRouteName — si le nom de la route correspond à votre page d’accueil (selon les paramètres du site), il renverra true
Maintenant, nous avons besoin de notre modèle
javascripts/discourse/components/custom-homepage-content.hbs
{{#if this.isHomepage}}
<h1>This is my homepage HTML content</h1>
{{/if}}
Le modèle vérifie le getter isHomepage, et affichera votre contenu si c’est true. Vous pouvez ajouter n’importe quel HTML que vous souhaitez entre les blocs {{#if}}.
Maintenant que notre composant est créé, nous devons l’ajouter quelque part dans Discourse. Pour cette étape, vous devrez décider quel plugin outlet utiliser. Ce sont des zones dans Discourse où nous avons ajouté un peu de code pour que les développeurs puissent s’y accrocher. Vous pouvez rechercher ceux-ci sur Github, ou les parcourir en utilisant (deprecated) Plugin outlet locations theme component.
Pour les pages d’accueil personnalisées, above-main-container est un choix courant, utilisons donc celui-ci.
Nous devons créer notre fichier de connecteur dans le répertoire correct :
javascripts/discourse/connectors/above-main-container/custom-homepage-connector.hbs
<CustomHomepageContent />
et c’est tout, il suffit d’une seule ligne appelant votre composant ![]()
Ce document est contrôlé par version - suggérez des modifications sur github.
