Ein Plugin für Discourse zu erstellen, ist wirklich einfach, sobald man ein paar Eigenheiten kennt. Ziel dieses Beitrags ist es, ein Grundgerüst für ein Plugin zu erstellen und dich mit den Basics vertraut zu machen.
Deine Entwicklungsumgebung
Stelle sicher, dass du eine Discourse-Entwicklungsumgebung auf deinem Computer ausführst. Ich empfehle dir, die entsprechende Einrichtungsanleitung zu befolgen und zurückzukommen, wenn du fertig bist.
plugin.rb
Nutze 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 unter Verwendung des Grundgerüsts.
Wenn Discourse gestartet wird, sucht es im plugins-Verzeichnis nach Unterverzeichnissen, die eine plugin.rb-Datei enthalten. Die plugin.rb-Datei hat zwei Zwecke: Sie ist das Manifest für dein Plugin mit den erforderlichen Informationen über dein Plugin, einschließlich: Name, Kontaktinformationen und einer Beschreibung. Der zweite Zweck ist die Initialisierung des gesamten Ruby-Codes, der zum Ausführen deines Plugins erforderlich ist.
In unserem Fall fügen wir keinen Ruby-Code hinzu, aber wir benötigen trotzdem die plugin.rb. Erstellen wir das Verzeichnis basic-plugin mit der darin enthaltenen Datei plugin.rb mit folgendem Inhalt:
basic-plugin/plugin.rb
# name: basic-plugin
# about: Ein super einfaches Plugin, um zu demonstrieren, wie Plugins funktionieren
# version: 0.0.1
# authors: Tolle Plugin-Entwickler
# url: https://github.com/deinbenutzername/basic-plugin
Sobald du diese Datei erstellt hast, solltest du deinen lokalen Server neu starten und das Plugin sollte geladen werden.
Ein wichtiger Stolperstein!
Wenn du an reguläre Rails-Entwicklung gewöhnt bist, wirst du vielleicht bemerken, dass Plugins beim Neuladen nicht ganz so komfortabel sind. Im Allgemeinen solltest du, wenn du Änderungen an deinem Plugin vornimmst, den Server mit Ctrl+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.
Überprüfen, ob dein Plugin geladen wurde
Sobald du deinen lokalen Server neu gestartet hast, besuche die URL /admin/plugins (stelle sicher, dass du dich 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 macht 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 nicht als echtes Plugin 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-Fenster sind nervig!");
},
};
Wenn du jetzt deinen lokalen Server neu startest, solltest du “Alert-Fenster sind nervig!” auf dem Bildschirm sehen. (Wenn nicht, siehe die Überschrift “Meine Änderungen wurden nicht übernommen” oben).
Schauen wir uns an, wie das funktioniert hat:
-
JavaScript-Dateien, die in
assets/javascripts/discourse/initializersplatziert 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, also habe ich ihn einfachalertgenannt. -
Die
initialize()-Funktion wird aufgerufen, wenn die Anwendung geladen wird. 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-Ausgänge
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 – schlage Änderungen auf GitHub vor.

