Créer un plugin dans Discourse peut être très simple, une fois que vous avez compris quelques particularités. L’objectif de ce tutoriel est de créer un squelette de plugin et de vous présenter les bases.
Votre environnement de développement
Assurez-vous d’avoir un environnement de développement de Discourse en cours d’exécution sur votre ordinateur. Je vous recommande de suivre le guide d’installation approprié et de revenir ici une fois que vous aurez terminé.
plugin.rb
Utilisez GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins · GitHub pour créer un squelette complet de plugin Discourse dans votre répertoire
plugins
Le squelette est désormais intégré au noyau de Discourse. La commande
rake plugin:create[nom-du-plugin]créera un plugin à partir de ce squelette.
Lorsque Discourse démarre, il recherche dans le répertoire plugins les sous-répertoires contenant un fichier plugin.rb. Ce fichier a deux objectifs : il sert de manifeste pour votre plugin, contenant les informations requises telles que son nom, ses coordonnées et une description. Le second objectif est d’initialiser tout le code Ruby nécessaire au fonctionnement de votre plugin.
Dans notre cas, nous n’ajouterons aucun code Ruby, mais nous avons toujours besoin du fichier plugin.rb. Créons le répertoire basic-plugin avec le fichier plugin.rb à l’intérieur, contenant le code suivant :
basic-plugin/plugin.rb
# name: basic-plugin
# about: Un plugin super simple pour démontrer le fonctionnement des plugins
# version: 0.0.1
# authors: Awesome Plugin Developer
# url: https://github.com/yourusername/basic-plugin
Une fois ce fichier créé, vous devez redémarrer votre serveur local et le plugin devrait être chargé.
Une astuce importante !
Si vous avez l’habitude du développement Rails classique, vous remarquerez peut-être que le rechargement des plugins n’est pas aussi fluide. En général, lorsque vous apportez des modifications à votre plugin, vous devez faire Ctrl+c pour arrêter le serveur, puis le relancer en utilisant bin/dev.
Mes modifications n’ont pas été prises en compte ! 
Parfois, le cache n’est pas entièrement vidé, en particulier lorsque vous créez de nouveaux fichiers ou supprimez d’anciens fichiers. Pour contourner ce problème, supprimez votre dossier tmp et redémarrez Rails. Sur un Mac, vous pouvez le faire en une seule commande : rm -rf tmp; bin/dev.
Vérifier que votre plugin a été chargé
Une fois que vous avez redémarré votre serveur local, rendez-vous sur l’URL /admin/plugins (assurez-vous d’être connecté avec un compte administrateur au préalable, car seuls les administrateurs peuvent voir le registre des plugins).
Si tout s’est bien passé, vous devriez voir votre plugin apparaître dans la liste :
Félicitations, vous venez de créer votre premier plugin !
Ajoutons du JavaScript
Pour l’instant, votre plugin ne fait rien. Ajoutons un fichier JavaScript qui affichera une boîte d’alerte lorsque Discourse se charge. Cela sera extrêmement ennuyeux pour tout utilisateur et n’est pas recommandé pour un plugin réel, mais cela montrera comment insérer du JavaScript dans notre application en cours d’exécution.
Créez le fichier suivant :
plugins/basic-plugin/assets/javascripts/discourse/initializers/alert.js
export default {
name: "alert",
initialize() {
alert("alert boxes are annoying!");
},
};
Maintenant, si vous redémarrez votre serveur local, vous devriez voir le message « alert boxes are annoying! » apparaître à l’écran. (Si ce n’est pas le cas, consultez la section « Mes modifications n’ont pas été prises en compte » ci-dessus).
Analysons comment cela fonctionne :
-
Les fichiers JavaScript placés dans
assets/javascripts/discourse/initializerssont exécutés automatiquement lorsque l’application Discourse se charge. -
Ce fichier spécifique
exporte un objet qui possède unname(nom) et une fonctioninitialize. -
Le
namedoit être unique, j’ai donc simplement appelé ce pluginalert. -
La fonction
initialize()est appelée lorsque l’application se charge. Dans notre cas, elle se contente d’exécuter notre codealert().
Vous êtes désormais un développeur de plugins Discourse officiel !
Plus dans cette série
Partie 1 : Ce sujet
Partie 2 : Plugin Outlets
Partie 3 : Paramètres du site
Partie 4 : Configuration de git
Partie 5 : Interfaces d’administration
Partie 6 : Tests d’acceptation
Partie 7 : Publiez votre plugin
Ce document est versionné - suggérez des modifications sur GitHub.

