Ein Plugin für Discourse zu erstellen, ist wirklich einfach, sobald man ein paar Besonderheiten 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 Entwicklungsumgebung von Discourse auf deinem Computer laufen hast. Ich empfehle dir, die entsprechende Einrichtungsanleitung 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-Grundgerüst in deinem Plugins-Verzeichnis zu erstellen
Das Grundgerüst ist jetzt in Discourse Core enthalten,
rake plugin:create[plugin-name]erstellt ein Plugin unter Verwendung des Grundgerü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 für dein Plugin mit den erforderlichen Informationen über dein Plugin, einschließlich: seines Namens, Kontaktinformationen und einer Beschreibung. Der zweite Zweck ist die Initialisierung des für die Ausführung deines Plugins erforderlichen Ruby-Codes.
In unserem Fall werden wir keinen Ruby-Code hinzufügen, 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: Toller 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 feststellen, dass Plugins beim Neuladen nicht ganz so angenehm 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 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 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 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
Momentan macht dein Plugin nichts. Fügen wir eine JavaScript-Datei hinzu, die beim Laden von Discourse ein Alert-Fenster anzeigen wird. Das wird für jeden Benutzer super nervig sein und wird nicht als echtes Plugin empfohlen, aber es wird zeigen, 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. (Wenn das nicht der Fall war, siehe oben den Abschnitt „Meine Änderungen wurden nicht übernommen“).
Gehen wir Schritt für Schritt durch, wie das funktioniert hat:
-
JavaScript-Dateien, die in
assets/javascripts/discourse/initializersplatziert sind, werden automatisch ausgeführt, wenn die Discourse-Anwendung lädt. -
Diese bestimmte Datei
export-iert ein Objekt, das einennameund eineinitialize-Funktion hat. -
Der
namemuss eindeutig sein, also habe ich ihn einfachalertgenannt. -
Die
initialize()-Funktion wird aufgerufen, wenn die Anwendung lädt. 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
Teil 3: Site-Einstellungen
Teil 4: Git-Einrichtung
Teil 5: Admin-Oberflächen
Teil 6: Akzeptanztests
Teil 7: Veröffentliche dein Plugin
Dieses Dokument ist versionskontrolliert – schlage Änderungen auf GitHub vor.

