Das Erstellen eines Plugins in Discourse kann wirklich einfach sein, sobald man ein paar Eigenheiten kennt. Das Ziel dieses Beitrags ist es, ein Skelett-Plugin zu erstellen und dich mit den Grundlagen vertraut zu machen.
Deine Entwicklungsumgebung
Stelle sicher, dass du eine Entwicklungsumgebung für Discourse auf deinem Computer zum Laufen gebracht hast. Ich empfehle dir, die entsprechende Einrichtungsanleitung zu verwenden und hierher zurückzukehren, sobald du fertig bist.
plugin.rb
Verwende GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins · GitHub, um ein vollständiges Discourse-Plugin-Skelett in deinem plugins-Verzeichnis zu erstellen
Das Skelett ist nun im Discourse-Core enthalten.
rake plugin:create[plugin-name]erstellt ein Plugin unter Verwendung des Skeletts.
Wenn Discourse startet, sucht es im plugins-Verzeichnis nach Unterverzeichnissen, die eine plugin.rb-Datei enthalten. Die Datei plugin.rb hat zwei Zwecke: Sie ist das Manifest deines Plugins mit den erforderlichen Informationen über dein Plugin, einschließlich seines Namens, der Kontaktinformationen und einer Beschreibung. Der zweite Zweck besteht darin, den für den Betrieb deines Plugins notwendigen Ruby-Code zu initialisieren.
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 dem folgenden Inhalt:
basic-plugin/plugin.rb
# name: basic-plugin
# about: Ein super einfaches Plugin zur Demonstration, 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, und das Plugin sollte geladen werden.
Eine wichtige Falle!
Wenn du an die reguläre Rails-Entwicklung gewöhnt bist, wirst du vielleicht bemerken, dass Plugins beim Neuladen nicht ganz so benutzerfreundlich sind. Im Allgemeinen solltest du, wenn du Änderungen an deinem Plugin vornimmst, den Server mit Strg+c stoppen und dann mit bin/dev erneut starten.
Meine Änderungen wurden nicht übernommen! 
Manchmal wird der Cache nicht vollständig gelöscht, insbesondere wenn du neue Dateien erstellst oder alte löschst. Um dieses Problem zu umgehen, lösche deinen tmp-Ordner und starte Rails erneut. Unter macOS kannst du dies mit einem einzigen Befehl tun: rm -rf tmp; bin/dev.
Überprüfen, ob dein Plugin geladen wurde
Nachdem du deinen lokalen Server neu gestartet hast, rufe die URL /admin/plugins auf (stelle sicher, dass du zuerst als Admin-Konto angemeldet bist, da nur Administratoren 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
Dein Plugin tut im Moment noch nichts. Fügen wir eine JavaScript-Datei hinzu, die beim Laden von Discourse eine Alert-Box anzeigt. Das wird für jeden Benutzer super 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 boxes are annoying!");
},
};
Wenn du nun deinen lokalen Server neu startest, solltest du „alert boxes are annoying!“ auf dem Bildschirm sehen. (Falls nicht, sieh dir die Überschrift „Meine Änderungen wurden nicht übernommen“ oben an).
Lassen Sie uns Schritt für Schritt durchgehen, wie das funktioniert hat:
-
JavaScript-Dateien, die in
assets/javascripts/discourse/initializersplatziert sind, werden automatisch ausgeführt, wenn die Discourse-Anwendung lädt. -
Diese spezielle Datei
exportein Objekt, das einennameund eineinitialize-Funktion hat. -
Der
namemuss eindeutig sein, also habe ich ihn einfachalertgenannt. -
Die Funktion
initialize()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 dieser Reihe
Teil 1: Dieses Thema
Teil 2: Plugin-Ausgabepunkte
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 versioniert – schlage Änderungen auf GitHub vor.

