Une situation très courante que vous rencontrerez en tant que développeur de thème est la nécessité de créer du contenu qui s’affiche uniquement 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, qui s’affichera alors sur chaque page. Vous pouvez faire des 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 visible uniquement 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épertoire suivante :
javascripts/discourse/components/
javascripts/discourse/connectors/
À partir de là, nous allons créer un composant Ember. Vous trouverez plus d’informations sur les composants Ember dans leur documentation : Ember.js Guides - Guides and Tutorials - Ember Guides
Mais pour l’instant, il s’agira d’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>Voici mon contenu HTML de page d'accueil</h1>
{{/if}}
</template>
}
Cela 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 (tel que défini par les paramètres du site), il retournera true. Le modèle à l’intérieur de <template>...</template> vérifie ce getter et n’affiche votre contenu que lorsque c’est true. Vous pouvez ajouter tout le 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 point d’extension (plugin outlet) utiliser. Ce sont des zones à travers Discourse où nous avons ajouté un peu de code pour que les développeurs puissent s’y connecter. Vous pouvez rechercher ces points d’extension sur Discourse via 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-le donc.
Nous devons créer notre fichier de connexion 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 suffit d’une seule ligne pour appeler votre composant ![]()
Ce document est sous contrôle de version — proposez des modifications sur GitHub.
