Ich glaube, ich habe das zum Laufen gebracht. Ziel: Bestimmte Themen an einer festgelegten Stelle in einer neuen Vorlage laden (funktioniert wahrscheinlich auch beim Hinzufügen zu bestehenden Vorlagen, habe das aber noch nicht getestet):
- Fügen Sie Ihren erfundenen Plugin-Auslass in Ihre Vorlage ein (mein erfundener Plugin-Auslass heißt „great-topics“, wie folgt):
{{plugin-outlet name="great-topics"}}
- Fügen Sie den Handlebars-Code (also Ihre Komponente) in einen Connector ein:
[your-plugin]/assets/javascripts/discourse/connectors/great-topics/new-component.hbs
<div>Ich bin im Plugin-Auslass! Lade die Themen:</div>
{{topic-list topics=featuredTopics showPosters=true}}
- Fügen Sie den JavaScript-Code für die Komponente hinzu, die sich in Ihrem neuen Connector befindet:
[your-plugin]/assets/javascripts/discourse/connectors/great-topics/new-component.js.es6
[dieser Code wurde aus dem folgenden Meta-Beitrag adaptiert, der Code enthält, der Themen mit dem Tag „featured“ lädt: 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 = [];
// Leeres Array erstellen, wir werden Themen darin ablegen
var featuredUsers = result.users;
// Die relevanten Benutzer abrufen
result.topic_list.topics.slice(0, 4).forEach(function (topic) {
// Wir extrahieren die Themen beginnend bei 0 und endend bei 4
// Das bedeutet, wir zeigen insgesamt 3 an. Erhöhen Sie 4, um mehr anzuzeigen.
topic.posters.forEach(function (poster) {
poster.user = $.grep(featuredUsers, function (e) { return e.id == poster.user_id; })[0];
});
// Benutzer mit unserem Thema verknüpfen
featuredTopics.push(Topic.create(topic));
// Unsere Themen in das featuredTopics-Array schieben
});
}) // Ende result.topic.topic_list...
component.set('featuredTopics', featuredTopics); //Hier werden die Themen zur Komponente hinzugefügt
component.set("loadingTopics", false); //Mein obiger Code hat keinen Lader. Aber dieser ist vorhanden, falls Sie einen Lader wünschen. Dafür muss zusätzlich zur hbs-Datei noch etwas hinzugefügt werden. Siehe den oben verlinkten Beitrag auf Meta
}); // Ende ajax
}// Ende setup component
Das funktioniert bei mir zumindest, um Themen mit dem Tag „featured“ im Plugin-Auslass meiner neuen Vorlage zu laden.
Um dies zu testen, muss der Server neu gestartet werden.