Кажется, мне удалось заставить это работать. Цель: загрузка определённых тем в указанное место нового шаблона (вероятно, это также работает для добавления в существующие шаблоны, но я это не тестировал):
- Вставьте свой вымышленный плагин-розетку в шаблон (мой вымышленный плагин-розетка называется “great-topics”, например):
{{plugin-outlet name="great-topics"}}
- Добавьте код Handlebars (то есть ваш компонент) в коннектор:
[ваш-плагин]/assets/javascripts/discourse/connectors/great-topics/new-component.hbs
<div>Я в плагин-розетке! Загрузить темы:</div>
{{topic-list topics=featuredTopics showPosters=true}}
- Добавьте JavaScript-код для компонента, который находится в вашем новом коннекторе:
[ваш-плагин]/assets/javascripts/discourse/connectors/great-topics/new-component.js.es6
[этот код адаптирован из следующего поста на Meta, где есть код для загрузки тем с тегом “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 = [];
// Создаём пустой массив, в который будем добавлять темы
var featuredUsers = result.users;
// Получаем соответствующих пользователей
result.topic_list.topics.slice(0, 4).forEach(function (topic) {
// Извлекаем темы, начиная с 0 и заканчивая 4
// Это означает, что мы покажем всего 3 темы. Увеличьте 4, чтобы показать больше.
topic.posters.forEach(function (poster) {
poster.user = $.grep(featuredUsers, function (e) { return e.id == poster.user_id; })[0];
});
// Связываем пользователей с нашей темой
featuredTopics.push(Topic.create(topic));
// Добавляем наши темы в массив featuredTopics
});
}) //конец result.topic.topic_list...
component.set('featuredTopics', featuredTopics); //именно здесь темы добавляются в компонент
component.set("loadingTopics", false); //в моём коде выше нет индикатора загрузки, но он нужен, если вы хотите его использовать. Для этого также нужно добавить соответствующий код в hbs-файл. См. связанный пост на Meta выше
}); //конец ajax
}//конец setup component
У меня это работает, по крайней мере, для загрузки тем с тегом “featured” в плагин-розетку моего нового шаблона.
Чтобы увидеть это в действии, необходимо перезапустить сервер.