Créer un plugin dans Discourse peut être vraiment simple, une fois que vous avez compris quelques particularités. L’objectif de cet article 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 une fois 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 de plugins
Le squelette est maintenant intégré au 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 des 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 telles que son nom, les coordonnées de contact et une description. La deuxième fonction est d’initialiser tout code Ruby nécessaire à l’exécution de votre plugin.
Dans notre cas, nous n’ajouterons pas de code Ruby, mais nous aurons 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: Développeur de plugins génial
# url: https://github.com/votreusername/basic-plugin
Une fois ce fichier créé, vous devez 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 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é, accédez à 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 fonctionne, vous devriez voir votre plugin dans la liste :
Félicitations, vous venez de créer votre premier plugin !
Ajoutons un peu de 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 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 « Les boîtes d’alerte sont agaçantes ! » 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).
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 particulier
exportun objet qui contient unnameet une fonctioninitialize. -
Le
namedoit être unique, donc je l’ai simplement appeléalert. -
La fonction
initialize()est appelée lorsque l’application se charge. Dans notre cas, elle exécute simplement notre codealert().
Vous êtes maintenant officiellement développeur de plugins Discourse !
Suite de la série
Partie 1 : Ce sujet
Partie 2 : Les points de sortie des plugins
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 sous contrôle de version – proposez des modifications sur GitHub.



