Плагин Gatsby для использования Discourse в качестве headless CMS

Я создал плагин не для Discourse, а для Gatsby. Этот плагин получает списки тем из установки Discourse и преобразует их в узлы Gatsby. Это упрощает использование Discourse в качестве headless CMS.

Мы используем его в проекте для создания микроблога и календаря, который автоматически обновляется при добавлении нового контента на форум.

Вот пример микроблога:

Источник: https://foodshift.se/t/forenade-inkop-nyheter-blogg/290/9
Результат: https://forenadeinkop.se/blogg

А вот календарь:

Источник: https://foodshift.se/tags/c/events/13/forenade-inkop/l/agenda
Результат: https://forenadeinkop.se (внизу страницы)

Надеюсь, это кому-то ещё пригодится!


npm version npm downloads

gatsby-source-discourse-topic-list помогает получать списки тем с платформы форума Discourse и преобразовывать их в узлы Gatsby.

Помимо списка тем, предоставляемого API Discourse, плагин также загружает исходный текст для каждой темы.

Начало работы

  1. Установите пакет с помощью yarn или npm

yarn add gatsby-source-discourse-topic-list

  1. Добавьте его в раздел plugins в файле gatsby-config.js
module.exports = {
    plugins: [
        {
            resolve: "gatsby-source-discourse-topic-list",
            options: {
                url: "https://my-discourse-server.com"
                endPoint: 'top.json',
            }
        }
    ]
};

Параметры

Имя Тип Описание
url объект или строка Обязательно. URL вашей установки Discourse в виде строки. Если у вас есть два разных API для разработки и продакшена, определите объект с ключами production и development.
endPoint строка Обязательно. Любой конечный пункт API Discourse, возвращающий topic_list.
rootKey строка Опционально. Имя вашего API.

Примеры конечных пунктов API Discourse

Последние темы в категории:

options: {
    url: "https://meta.discourse.org"
    endPoint: 'c/1.json',
}

Последние темы в категории, отфильтрованные по тегу:

options: {
    url: "https://meta.discourse.org"
    endPoint: 'tags/c/bug/1/pr-welcome.json',
}

Топовые темы в категории:

options: {
    url: "https://meta.discourse.org"
    endPoint: 'c/support/6/l/top.json',
}

Полный список конечных пунктов см. в документации API Discourse.

Пример результата

Обратите внимание на добавленное поле raw, содержащее полный необработанный текст темы.

{
  "users": [
    {
      "id": 0,
      "username": "string",
      "avatar_template": "string"
    }
  ],
  "topic_list": {
    "can_create_topic": true,
    "draft": {},
    "draft_key": "string",
    "draft_sequence": 0,
    "for_period": "string",
    "per_page": 0,
    "topics": [
      {
        "id": 0,
        "title": "string",
        "fancy_title": "string",
        "slug": "string",
        "raw": "Полный необработанный текст темы в формате Markdown", 
        ...
      }
    ]
  }
}

Несколько источников? Несколько экземпляров!

Если вы хотите получать данные из нескольких конечных пунктов в вашем проекте, просто создайте несколько экземпляров плагина. Обязательно задайте уникальный rootKey для каждого экземпляра.

Благодарности

Этот плагин разработан на основе отличного gatsby-source-custom-api от Андреаса Фауста. :folded_hands:

Вклад в развитие

Мы высоко ценим любой вклад.
Не стесняйтесь сообщать об ошибках, предлагать новые функции и создавать pull-запросы.

:heart: Если этот плагин оказался вам полезен, поставьте ему звезду на GitHub.

Выглядит неплохо. Работает ли это с темами из приватных категорий? Я имею в виду сценарий использования Discourse в качестве headless CMS.

Сейчас это не реализовано, но идея хорошая, добавить это несложно. Доступ к приватному контенту требует аутентификации. В конфигурацию Gatsby можно добавить имя пользователя и API-ключ.