Das Erstellen eines Plugins für Discourse kann wirklich einfach sein, sobald man ein paar Eigenheiten kennt. Ziel dieses Beitrags ist es, ein Grundgerüst für ein Plugin zu erstellen und dich mit den Grundlagen vertraut zu machen.
Deine Entwicklungsumgebung
Stelle sicher, dass auf deinem Computer eine Entwicklungsumgebung für Discourse läuft. Ich empfehle dir, den entsprechenden Einrichtungsratgeber zu verwenden und zurückzukommen, wenn du fertig bist.
plugin.rb
Verwende GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins · GitHub, um ein vollständiges Discourse-Plugin-Gerüst in deinem plugins-Verzeichnis zu erstellen
Das Gerüst ist jetzt in Discourse Core enthalten;
rake plugin:create[plugin-name]erstellt ein Plugin auf Basis des Gerüsts
Wenn Discourse startet, sucht es im plugins-Verzeichnis nach Unterverzeichnissen, die eine plugin.rb-Datei enthalten. Die plugin.rb-Datei hat zwei Zwecke: Sie ist das Manifest deines Plugins mit den erforderlichen Informationen zu deinem Plugin, einschließlich: Name, Kontaktinformationen und eine Beschreibung. Der zweite Zweck besteht darin, den Ruby-Code zu initialisieren, der zum Ausführen deines Plugins erforderlich ist.
In unserem Fall werden wir keinen Ruby-Code hinzufügen, aber wir benötigen trotzdem die plugin.rb. Lass uns das Verzeichnis basic-plugin mit der Datei plugin.rb darin erstellen, mit dem folgenden Inhalt:
basic-plugin/plugin.rb
# name: basic-plugin
# about: A super simple plugin to demonstrate how plugins work
# version: 0.0.1
# authors: Awesome Plugin Developer
# url: https://github.com/yourusername/basic-plugin
Sobald du diese Datei erstellt hast, solltest du deinen lokalen Server neu starten und das Plugin sollte geladen werden.
Eine wichtige Tücke!
Wenn du an regulärer Rails-Entwicklung gewöhnt bist, wirst du vielleicht feststellen, dass Plugins beim Neuladen nicht ganz so komfortabel sind. Im Allgemeinen solltest du, wenn du Änderungen an deinem Plugin vornimmst, den Server mit Strg+C stoppen und ihn dann mit bin/dev erneut ausführen.
Meine Änderungen wurden nicht übernommen! 
Manchmal wird der Cache nicht vollständig geleert, insbesondere wenn du neue Dateien erstellst oder alte Dateien löschst. Um dieses Problem zu umgehen, entferne dein tmp-Verzeichnis und starte Rails erneut. Auf einem Mac kannst du das mit einem einzigen Befehl tun: rm -rf tmp; bin/dev.
Prüfen, ob dein Plugin geladen wurde
Sobald du deinen lokalen Server neu gestartet hast, besuche die URL /admin/plugins (stelle sicher, dass du dich zuerst als Admin-Konto angemeldet hast, da nur Admins das Plugin-Register sehen können).
Wenn alles funktioniert hat, solltest du dein Plugin in der Liste sehen:
Glückwunsch, du hast gerade dein erstes Plugin erstellt!
Lass uns etwas JavaScript hinzufügen
Im Moment tut dein Plugin nichts. Lass uns eine JavaScript-Datei hinzufügen, die beim Laden von Discourse ein Alert-Fenster anzeigt. Das wird für jeden Benutzer super nervig sein und wird als echtes Plugin nicht empfohlen, aber es zeigt, wie man JavaScript in unsere laufende Anwendung einfügt.
Erstelle die folgende Datei:
plugins/basic-plugin/assets/javascripts/discourse/initializers/alert.js
export default {
name: "alert",
initialize() {
alert("alert boxes are annoying!");
},
};
Wenn du nun deinen lokalen Server neu startest, solltest du auf dem Bildschirm „alert boxes are annoying!“ sehen. (Wenn das nicht der Fall war, siehe die Überschrift „Meine Änderungen wurden nicht übernommen“ oben).
Lass uns durchgehen, wie das funktioniert hat:
-
JavaScript-Dateien, die in
assets/javascripts/discourse/initializersabgelegt werden, werden automatisch ausgeführt, wenn die Discourse-Anwendung geladen wird. -
Diese bestimmte Datei
exportiert ein Objekt, das einennameund eineinitialize-Funktion hat. -
Der
namemuss eindeutig sein, daher habe ich ihn einfachalertgenannt. -
Die
initialize()-Funktion wird aufgerufen, wenn die Anwendung geladen wird. In unserem Fall führt sie lediglich unserenalert()-Code aus.
Du bist jetzt ein offizieller Discourse-Plugin-Entwickler!
Mehr in der Serie
Teil 1: Dieses Thema
Teil 2: Plugin Outlets
Teil 3: Site Settings
Teil 4: git setup
Teil 5: Admin interfaces
Teil 6: Acceptance tests
Teil 7: Publish your plugin
Dieses Dokument wird versioniert verwaltet – Vorschläge für Änderungen auf GitHub.

