Plugin Gatsby pour utiliser Discourse en tant que CMS headless

J’ai créé un plugin, non pas pour Discourse, mais pour Gatsby. Ce plugin récupère les listes de sujets depuis une installation Discourse et les transforme en nœuds Gatsby. Il simplifie l’utilisation de Discourse en tant que CMS headless.

Nous l’utilisons dans un projet pour créer un microblog et un calendrier qui se met à jour automatiquement lorsque de nouveaux contenus sont ajoutés au forum.

Voici le microblog :

Source : https://foodshift.se/t/forenade-inkop-nyheter-blogg/290/9
Résultat : https://forenadeinkop.se/blogg

Et voici le calendrier :

Source : https://foodshift.se/tags/c/events/13/forenade-inkop/l/agenda
Résultat : https://forenadeinkop.se (en bas de page)

J’espère que cela sera utile à d’autres !


version npm téléchargements npm

gatsby-source-discourse-topic-list vous permet de récupérer des listes de sujets depuis la plateforme de forum de discussion Discourse et de les transformer en nœuds Gatsby.

En plus de la liste de sujets fournie par l’API Discourse, le plugin récupère également le texte brut de chaque sujet.

Démarrage

  1. Installez le package avec yarn ou npm

yarn add gatsby-source-discourse-topic-list

  1. Ajoutez-le aux plugins dans votre fichier gatsby-config.js
module.exports = {
    plugins: [
        {
            resolve: "gatsby-source-discourse-topic-list",
            options: {
                url: "https://mon-serveur-discourse.com"
                endPoint: 'top.json',
            }
        }
    ]
};

Options

Nom Type Description
url objet ou chaîne Obligatoire. URL de votre installation Discourse sous forme de chaîne. Si vous avez deux API différentes pour le développement et la production, définissez un objet avec les clés production et development.
endPoint chaîne Obligatoire. N’importe quel point de terminaison de l’API Discourse retournant une topic_list.
rootKey chaîne Optionnel. Nommez votre API.

Exemples de points de terminaison de l’API Discourse

Sujets les plus récents dans une catégorie :

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

Sujets les plus récents dans une catégorie, filtrés par tag :

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

Sujets populaires dans une catégorie :

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

Consultez la documentation de l’API Discourse pour la liste complète des points de terminaison.

Exemple de résultat

Remarquez le champ raw ajouté contenant le texte complet et non traité du sujet.

{
  "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": "Le texte complet et non traité du sujet au format markdown", 
        ...
      }
    ]
  }
}

Plusieurs sources ? Plusieurs instances !

Si vous souhaitez récupérer plusieurs points de terminaison dans votre projet, instanciez simplement le plugin plusieurs fois. Assurez-vous simplement de définir une rootKey différente pour chaque instance.

Crédits

Ce plugin s’appuie sur l’excellent gatsby-source-custom-api de Andreas Faust. :folded_hands:

Contribution

Toute contribution est grandement appréciée.
N’hésitez pas à signaler des bugs, à proposer des fonctionnalités ou à faire des pull requests.

:heart: Si ce plugin vous est utile, mettez-le en favoris sur GitHub.

11 « J'aime »

Cela a l’air bien. Cela fonctionne-t-il avec des sujets provenant de catégories privées ? Je parle du scénario où l’on utilise Discourse en tant que CMS headless.

2 « J'aime »

Pas actuellement, mais c’est une bonne idée, ce ne serait pas difficile à ajouter. L’accès au contenu privé nécessite une authentification. Un nom d’utilisateur et une clé API pourraient être ajoutés à la configuration de Gatsby.

2 « J'aime »