Une situation très courante à laquelle vous serez confronté en tant que développeur de thème est le besoin de créer du contenu n’apparaissant que sur la page d’accueil de votre communauté.
Vous pourriez ajouter du HTML dans la section « Après l’en-tête » de votre thème, ce qui ferait alors apparaître ce contenu sur chaque page. Vous pouvez faire quelques acrobaties en CSS pour le masquer partout sauf sur la page d’accueil… mais plutôt que cela, utilisons un thème Discourse pour créer un composant dont le contenu 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 mettre en place 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, écrit dans un seul fichier .gjs contenant à la fois la logique et le modèle.
javascripts/discourse/components/custom-homepage-content.gjs
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()}`;
}
<template>
{{#if this.isHomepage}}
<h1>Ceci est le contenu HTML de ma page d’accueil</h1>
{{/if}}
</template>
}
Ceci crée un accesseur isHomepage, qui vérifie le service routeur pour le currentRouteName — si le nom de la route correspond à votre page d’accueil (tel que défini par les paramètres du site), il retournera true. Le modèle à l’intérieur de <template>...</template> vérifie cet accesseur et n’affiche votre contenu que lorsqu’il est true. Vous pouvez ajouter n’importe quel HTML que vous voulez 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 point d’extension de plugin utiliser. Il s’agit de zones à travers Discourse où nous avons ajouté un peu de code pour que les développeurs puissent s’y raccrocher. Vous pouvez rechercher ces points d’extension 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 bon répertoire :
javascripts/discourse/connectors/above-main-container/custom-homepage-connector.gjs
import CustomHomepageContent from "../../components/custom-homepage-content";
<template><CustomHomepageContent /></template>
et c’est tout, il ne faut qu’une seule ligne appelant votre composant ![]()
Ce document est sous contrôle de version - suggérez des modifications sur github.
