Créer un plugin Discourse peut être vraiment simple, une fois que vous avez appris quelques particularités. L’objectif de ce post 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 Discourse en cours d’exécution sur votre ordinateur. Je vous recommande d’utiliser le guide d’installation approprié et de revenir une fois que vous avez terminé.
plugin.rb
Utilisez GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins · GitHub pour créer un squelette de plugin Discourse complet dans votre répertoire plugins
Le squelette est maintenant inclus dans le noyau de Discourse,
rake plugin:create[nom-du-plugin]créera un plugin en utilisant le squelette
Lorsque Discourse démarre, il recherche dans le répertoire plugins les sous-répertoires contenant un fichier plugin.rb. Le fichier plugin.rb a deux objectifs : il est le manifeste de votre plugin avec les informations requises sur votre plugin, y compris : son nom, les informations de contact et une description. Le deuxième objectif est d’initialiser tout le code ruby nécessaire pour exécuter votre plugin.
Dans notre cas, nous n’ajouterons aucun code ruby, mais nous avons quand même besoin du plugin.rb. Créons le répertoire basic-plugin avec le fichier plugin.rb à l’intérieur, avec le contenu suivant :
basic-plugin/plugin.rb
# name: basic-plugin
# about: Un plugin super simple pour démontrer comment les plugins fonctionnent
# version: 0.0.1
# authors: Développeur de Plugin Génial
# url: https://github.com/votreusername/basic-plugin
Une fois que vous avez créé ce fichier, vous devriez redémarrer votre serveur local et le plugin devrait être chargé.
Un piège important !
Si vous êtes habitué au développement rails classique, vous remarquerez peut-être que les plugins ne sont pas aussi agréables en ce qui concerne le rechargement. En général, lorsque vous apportez des modifications à votre plugin, vous devriez faire Ctrl+c au serveur pour l’arrêter, 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é, surtout 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, visitez l’URL /admin/plugins (assurez-vous d’être connecté en tant que compte administrateur d’abord, car seuls les administrateurs peuvent voir le registre des plugins).
Si tout a fonctionné, vous devriez voir votre plugin 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 chargera. Cela sera super ennuyeux pour n’importe quel utilisateur et n’est pas recommandé comme un plugin réel, mais 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("les boîtes d'alerte sont ennuyeuses !");
},
};
Maintenant, si vous redémarrez votre serveur local, vous devriez voir “les boîtes d’alerte sont ennuyeuses !” apparaître à l’écran. (Si ce n’est pas le cas, consultez le titre “Mes modifications n’ont pas été prises en compte” ci-dessus).
Décomposons comment cela a fonctionné :
-
Les fichiers Javascript placés dans
assets/javascripts/discourse/initializerssont exécutés automatiquement lorsque l’application Discourse se charge. -
Ce fichier particulier
exporte un objet, qui a unnameet une fonctioninitialize. -
Le
namedoit être unique, alors je l’ai simplement appeléalert. -
La fonction
initialize()est appelée lorsque l’application se charge. Dans notre cas, elle ne fait qu’exécuter notre codealert().
Vous êtes maintenant un développeur de plugins Discourse officiel !
Plus dans la série
Partie 1 : Ce sujet
Partie 2 : Plugin Outlets
Partie 3 : Site Settings
Partie 4 : Configuration git
Partie 5 : Interfaces administrateur
Partie 6 : Tests d’acceptation
Partie 7 : Publier votre plugin
Ce document est sous contrôle de version - suggérez des modifications sur github.

