Die Entwicklung 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 du eine Discourse-Entwicklungsumgebung auf deinem Computer zum Laufen gebracht hast. Ich empfehle dir, die entsprechende Einrichtungsanleitung zu befolgen und hierher 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-Grundgerüst in deinem Plugins-Verzeichnis zu erstellen
Das Grundgerüst ist jetzt im Discourse-Kern enthalten.
rake plugin:create[plugin-name]erstellt ein Plugin basierend auf diesem Grundgerüst.
Wenn Discourse startet, sucht es im Verzeichnis plugins nach Unterverzeichnissen, die eine Datei namens plugin.rb enthalten. Die Datei plugin.rb hat zwei Zwecke: Sie dient als Manifest für dein Plugin und enthält die erforderlichen Informationen darüber, wie Name, Kontaktinformationen und Beschreibung. Der zweite Zweck ist die Initialisierung des Ruby-Codes, der zum Ausführen deines Plugins erforderlich ist.
In unserem Fall fügen wir keinen Ruby-Code hinzu, benötigen aber trotzdem die plugin.rb. Erstellen wir das Verzeichnis basic-plugin mit der Datei plugin.rb darin und folgenden Inhalten:
basic-plugin/plugin.rb
# name: basic-plugin
# about: Ein super einfaches Plugin, um zu demonstrieren, wie Plugins funktionieren
# 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, damit das Plugin geladen wird.
Ein wichtiger Fallstrick!
Wenn du an reguläre Rails-Entwicklung gewöhnt bist, wirst du vielleicht feststellen, dass Plugins beim Neuladen nicht ganz so komfortabel sind. Im Allgemeinen solltest du bei Änderungen an deinem Plugin den Server mit Strg+c stoppen und ihn dann erneut mit bin/dev starten.
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 deinen tmp-Ordner und starte Rails erneut. Auf einem Mac kannst du das mit einem Befehl tun: rm -rf tmp; bin/dev.
Prüfen, ob dein Plugin geladen wurde
Nachdem 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:
Herzlichen Glückwunsch, du hast gerade dein erstes Plugin erstellt!
Fügen wir etwas JavaScript hinzu
Derzeit tut dein Plugin nichts. Fügen wir eine JavaScript-Datei hinzu, die beim Laden von Discourse ein Alert-Fenster anzeigt. Das wird für jeden Benutzer extrem nervig sein und wird als echtes Plugin nicht empfohlen, zeigt aber, 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-Boxen sind nervig!");
},
};
Wenn du jetzt deinen lokalen Server neu startest, solltest du „Alert-Boxen sind nervig!“ auf dem Bildschirm sehen. (Falls nicht, siehe oben den Abschnitt „Meine Änderungen wurden nicht übernommen“).
Schauen wir uns an, wie das funktioniert hat:
-
JavaScript-Dateien, die im Verzeichnis
assets/javascripts/discourse/initializersplatziert sind, 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, also habe ich ihn einfachalertgenannt. -
Die
initialize()-Funktion wird beim Laden der Anwendung aufgerufen. In unserem Fall führt sie nur unserenalert()-Code aus.
Du bist jetzt ein offizieller Discourse-Plugin-Entwickler!
Mehr in der Serie
Teil 1: Dieses Thema
Teil 2: Plugin-Ausgabeorte (Outlets)
Teil 3: Site-Einstellungen
Teil 4: Git-Einrichtung
Teil 5: Admin-Oberflächen
Teil 6: Akzeptanztests
Teil 7: Veröffentliche dein Plugin
Dieses Dokument wird versionskontrolliert verwaltet – schlage Änderungen auf GitHub vor.

