Как подтягивать данные из БД для компонентов вашей темы?

Подскажите, пожалуйста, есть ли где-нибудь руководство или пример по этому вопросу?

Например, если я использую компонент темы для создания боковой колонки, как можно отобразить в ней 20 последних публично видимых тем (или, если проще, тем из категорий, указанных в запросе)?

Есть несколько способов сделать это. Самый простой — использовать AJAX-запрос к конечной точке в Rails API, которая возвращает данные, которые вы хотите отобразить. Если вам нужны последние 20 тем, попробуйте запросить /latest.json.

Сложность возникает, если вам нужно объединить информацию из нескольких конечных точек: тогда приходится ждать завершения нескольких запросов, что может значительно замедлить производительность компонента темы.

Спасибо за ответ, Джастин :slight_smile:

Есть ли простой способ просто повторно использовать ленты/данные, которые уже предоставляет Discourse? (Чтобы они также учитывали настройки пользователя).

Например, в боковой колонке у нас может быть:

  • Последние 10 тем (лента со страницы «Последние», но также учитывает скрытые категории)
  • Популярные темы на этой неделе (со страницы /top)
  • Популярные темы в этом месяце
  • Популярные темы в этом году
  • Самые активные пользователи в этом месяце (со страницы /u?period=monthly)

На других платформах для форумов это делается довольно легко, и я очень скучаю по этому в Discourse :sob:

Абсолютно верно. Асинхронные запросы к соответствующим конечным точкам будут учитывать текущие настройки пользователя.

Запрос к /latest.json покажет только самые последние темы, которые видит этот конкретный пользователь.

Отправьте GET-запрос к тем же путям, добавив .json к URL, и посмотрите, что вы найдете!

Как вы думаете, это будет примерно то же самое, что и просто выполнять запросы к базе данных, которые выполняют эти конечные точки? (Или это потребует значительно больше ресурсов, поскольку это может быть равносильно загрузке 5 дополнительных страниц — по одной для каждой конечной точки).

В любом случае я бы хотел поэкспериментировать с этим — есть ли какие-либо руководства или уроки, показывающие, как получать данные из конечной точки в компонент темы? (Или лучше/эффективнее создать плагин?)

Я знаю, как создать компонент темы и «заглушку» плагина, но не нашел руководств, показывающих, как получать данные из БД в них.

https://meta.discourse.org/t/how-to-add-a-featured-topic-list-to-your-discourse-homepage/132949

Это руководство показывает, как это сделать с помощью конкретного тега, но вы можете воспроизвести этот подход с любым конечным пунктом.