Créer un plugin dans Discourse peut être très simple, une fois que vous avez compris 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 de Discourse en cours d’exécution sur votre ordinateur. Je vous recommande d’utiliser le guide de configuration approprié et de revenir lorsque 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 de plugins
Le squelette est désormais inclus dans le cœur de Discourse ; la commande
rake plugin:create[plugin-name]créera un plugin en utilisant ce squelette.
Lors du démarrage de Discourse, il recherche dans le répertoire plugins les sous-répertoires contenant un fichier plugin.rb. Le fichier plugin.rb a deux objectifs : il sert de manifeste pour votre plugin avec les informations requises, notamment son nom, ses coordonnées et une description. La seconde fonction est d’initialiser tout le code Ruby nécessaire à l’exécution de votre plugin.
Dans notre cas, nous n’ajouterons pas de code Ruby, mais nous aurons tout de même besoin du fichier plugin.rb. Créons le répertoire basic-plugin contenant le fichier plugin.rb avec le contenu 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: Développeur de plugins génial
# url: https://github.com/votre_nom_utilisateur/basic-plugin
Une fois ce fichier créé, vous devez redémarrer votre serveur local ; le plugin devrait alors ê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 pratiques en ce qui concerne le rechargement. En général, lorsque vous apportez des modifications à votre plugin, vous devez arrêter le serveur en appuyant sur Ctrl+c, puis le relancer avec 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 votre serveur local redémarré, visitez l’URL /admin/plugins (assurez-vous d’abord d’être connecté avec un compte administrateur, car seuls les administrateurs peuvent voir le registre des plugins).
Si tout fonctionne correctement, 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 charge. Cela serait très agaçant pour tout utilisateur et n’est pas recommandé pour un vrai plugin, 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("les boîtes d'alerte sont agaçantes !");
},
};
Maintenant, si vous redémarrez votre serveur local, vous devriez voir apparaître « les boîtes d’alerte sont agaçantes ! » à 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 lors du chargement de l’application Discourse. -
Ce fichier particulier
exporteun objet contenant unnameet une fonctioninitialize. -
Le
namedoit être unique, alors je l’ai simplement appeléalert. -
La fonction
initialize()est appelée lors du chargement de l’application. Dans notre cas, elle se contente d’exécuter notre codealert().
Vous êtes maintenant un développeur de plugins Discourse officiel !
Plus dans cette série
Partie 1 : Ce sujet
Partie 2 : Les Plugin Outlets
Partie 3 : Paramètres du site
Partie 4 : Configuration git
Partie 5 : Interfaces d’administration
Partie 6 : Tests d’acceptation
Partie 7 : Publiez votre plugin
Ce document est versionné ; proposez des modifications sur GitHub.

