Je pense que j’ai réussi à faire fonctionner cela. Objectif : charger certains sujets à un emplacement spécifié dans un nouveau modèle (cela fonctionne probablement aussi pour l’ajout à des modèles existants, mais je ne l’ai pas testé) :
- Insérez votre point d’extension personnalisé dans votre modèle (mon point d’extension personnalisé s’appelle « great-topics », par exemple) :
{{plugin-outlet name="great-topics"}}
- Ajoutez le code Handlebars (c’est-à-dire votre composant) dans un connecteur :
[your-plugin]/assets/javascripts/discourse/connectors/great-topics/new-component.hbs
<div>Je suis dans le point d'extension ! Chargez les sujets :</div>
{{topic-list topics=featuredTopics showPosters=true}}
- Ajoutez le code JavaScript pour le composant qui se trouve dans votre nouveau connecteur :
[your-plugin]/assets/javascripts/discourse/connectors/great-topics/new-component.js.es6
[ce code est adapté de la publication Meta suivante qui contient du code chargeant des sujets avec le tag « featured » : https://meta.discourse.org/t/how-to-add-a-featured-topic-list-to-your-discourse-homepage/132949]
const ajax = require('discourse/lib/ajax').ajax;
const Topic = require('discourse/models/topic').default;
setupComponent(args, component) {
ajax("/tag/featured.json").then(function (result) {
let featuredTopics = [];
// Créez un tableau vide, nous y ajouterons les sujets
var featuredUsers = result.users;
// Récupérez les utilisateurs pertinents
result.topic_list.topics.slice(0, 4).forEach(function (topic) {
// Nous extrayons les sujets commençant à 0 et se terminant à 4
// Cela signifie que nous en afficherons 3 au total. Augmentez 4 pour en voir plus.
topic.posters.forEach(function (poster) {
poster.user = $.grep(featuredUsers, function (e) { return e.id == poster.user_id; })[0];
});
// Associez les utilisateurs à notre sujet
featuredTopics.push(Topic.create(topic));
// Ajoutez nos sujets au tableau featuredTopics
});
}) // fin de result.topic.topic_list...
component.set('featuredTopics', featuredTopics); // c'est ici que les sujets sont ajoutés au composant
component.set("loadingTopics", false); //mon code ci-dessus n'a pas de chargeur. mais ceci est présent si vous en voulez un. Il faut l'ajouter au fichier hbs en plus. Voir la publication liée sur Meta ci-dessus
}); // fin de ajax
}// fin de setup component
Cela fonctionne pour moi, du moins, pour charger des sujets avec le tag « featured » dans le point d’extension de mon nouveau modèle.
Pour voir cela fonctionner, il faudra redémarrer le serveur.