Das Erstellen eines Plugins in Discourse kann ganz einfach sein, sobald man ein paar Eigenheiten gelernt hat. Das Ziel dieses Beitrags ist es, ein Skelett-Plugin zu erstellen und Sie mit den Grundlagen vertraut zu machen.
Ihre Entwicklungsumgebung
Stellen Sie sicher, dass Sie eine Entwicklungsumgebung von Discourse auf Ihrem Computer installiert haben. Ich empfehle Ihnen, die entsprechende Einrichtungsanleitung zu verwenden und erst zurückzukommen, wenn Sie fertig sind.
plugin.rb
Verwenden Sie GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins, um ein vollständiges Discourse-Plugin-Skelett in Ihrem Plugins-Verzeichnis zu erstellen
Das Skelett ist jetzt in den Discourse-Kern integriert.
rake plugin:create[plugin-name]erstellt ein Plugin mithilfe des Skeletts.
Wenn Discourse startet, sucht es im plugins-Verzeichnis nach Unterverzeichnissen, die eine plugin.rb-Datei enthalten. Die plugin.rb-Datei hat zwei Zwecke: Sie dient als Manifest für Ihr Plugin mit den erforderlichen Informationen über Ihr Plugin, einschließlich: Name, Kontaktinformationen und einer Beschreibung. Der zweite Zweck besteht darin, jeglichen Ruby-Code zu initialisieren, der für die Ausführung Ihres Plugins notwendig ist.
In unserem Fall werden wir keinen Ruby-Code hinzufügen, aber wir benötigen die plugin.rb trotzdem. Erstellen wir das Verzeichnis basic-plugin mit der Datei plugin.rb darin, 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: Awesome Plugin Developer
# url: https://github.com/yourusername/basic-plugin
Sobald Sie diese Datei erstellt haben, sollten Sie Ihren lokalen Server neu starten und das Plugin sollte geladen werden.
Ein wichtiger Stolperstein!
Wenn Sie an die normale Rails-Entwicklung gewöhnt sind, werden Sie vielleicht feststellen, dass Plugins beim Neuladen nicht ganz so komfortabel sind. Im Allgemeinen sollten Sie beim Ändern Ihres Plugins den Server mit Ctrl+c stoppen und ihn dann mit bin/ember-cli -u erneut starten.
Meine Änderungen wurden nicht übernommen! 
Manchmal wird der Cache nicht vollständig gelöscht, insbesondere wenn Sie neue Dateien erstellen oder alte löschen. Um dieses Problem zu umgehen, entfernen Sie Ihren tmp-Ordner und starten Sie Rails neu. Auf einem Mac können Sie dies mit einem Befehl erledigen: rm -rf tmp; bin/ember-cli -u.
Überprüfen, ob Ihr Plugin geladen wurde
Nachdem Sie Ihren lokalen Server neu gestartet haben, besuchen Sie die URL /admin/plugins (stellen Sie sicher, dass Sie sich zuerst als Admin-Konto angemeldet haben, da nur Admins die Plugin-Registrierung sehen können).
Wenn alles funktioniert hat, sollten Sie Ihr Plugin in der Liste sehen:
Herzlichen Glückwunsch, Sie haben gerade Ihr erstes Plugin erstellt!
Fügen wir etwas Javascript hinzu
Im Moment macht Ihr Plugin nichts. Fügen wir eine Javascript-Datei hinzu, die ein Alert-Fenster anzeigt, wenn Discourse geladen wird. Dies wird für jeden Benutzer super nervig sein und wird nicht als tatsächliches Plugin empfohlen, zeigt aber, wie man Javascript in unsere laufende Anwendung einfügt.
Erstellen Sie die folgende Datei:
plugins/basic-plugin/assets/javascripts/discourse/initializers/alert.js
export default {
name: "alert",
initialize() {
alert("alert boxes are annoying!");
},
};
Wenn Sie nun Ihren lokalen Server neu starten, sollte „alert boxes are annoying!“ auf dem Bildschirm erscheinen. (Falls dies nicht der Fall war, siehe die Überschrift „Meine Änderungen wurden nicht übernommen“ oben).
Lassen Sie uns Schritt für Schritt durchgehen, wie das funktioniert hat:
-
Javascript-Dateien, die in
assets/javascripts/discourse/initializersabgelegt werden, werden automatisch ausgeführt, wenn die Discourse-Anwendung hochfährt. -
Diese spezielle Datei
exportiert ein Objekt, das einennameund eineinitialize-Funktion hat. -
Der
namemuss eindeutig sein, ich habe ihn einfachalertgenannt. -
Die Funktion
initialize()wird aufgerufen, wenn die Anwendung geladen wird. In unserem Fall führt sie nur unserenalert()-Code aus.
Sie sind 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 – schlagen Sie Änderungen auf github vor.



