Vorheriges Tutorial: Developing Discourse Plugins - Part 1 - Create a basic plugin
Erste Schritte: Templates
Die Client-Anwendung von Discourse wurde mit dem JavaScript-Framework Ember.js geschrieben. Ember verwendet Templates, um HTML zu generieren. Unter diesem Link finden Sie eine hervorragende Einführung in die Template-Sprache. Lesen Sie diese unbedingt sorgfältig durch.
Das Problem: Elemente zur Benutzeroberfläche von Discourse hinzufügen
Viele Plugins müssen die Web-Oberfläche von Discourse erweitern und um neue Elemente ergänzen. Wir bieten dafür einen Mechanismus an, der als Plugin-Outlet in Handlebars-Templates bezeichnet wird.
Wenn Sie die Templates von Discourse durchsuchen, werden Sie häufig folgende Markup-Struktur sehen:
<PluginOutlet @name="edit-topic" />
Dies deklariert ein Plugin-Outlet namens „edit-topic“. Es handelt sich um eine Erweiterungsmöglichkeit im Template, die Plugin-Entwickler nutzen können, um eigenes Markup hinzuzufügen.
Beim Erstellen Ihres Plugins suchen Sie in den Discourse-Templates (in .gjs-Dateien), die Sie ändern möchten, nach einem <PluginOutlet />. Falls keines vorhanden ist, fragen Sie uns einfach, ob wir es erweitern können! Wir fügen diese gerne hinzu, wenn Sie einen guten Anwendungsfall haben. Wenn Sie uns die Arbeit erleichtern und beschleunigen möchten, reichen Sie bitte einen Pull-Request auf GitHub ein!
Wenn Sie sehen möchten, an welchen Stellen Plugin-Outlets existieren, können Sie den folgenden Befehl in einer POSIX-konformen Shell ausführen:
git grep -A 1 "<PluginOutlet" -- "*.gjs"
Sie können die Plugin-Outlets auch auf einer Discourse-Website anzeigen, indem Sie die Discourse Developer Toolbar aktivieren. Geben Sie einfach enableDevTools() in die Browser-Konsole auf einem Discourse-Forum ein und klicken Sie auf das Steckdosen-Symbol, das auf der linken Seite der Seite erscheint.
Verbindung zu einem Plugin-Outlet herstellen
Sobald Sie das Plugin-Outlet gefunden haben, zu dem Sie etwas hinzufügen möchten, müssen Sie einen connector dafür schreiben. Ein Connector ist eine .gjs-Komponente, deren Dateiname im Pfad connectors/<Outlet-Name> enthält.
Zum Beispiel, wenn das Discourse-Template Folgendes enthält:
<PluginOutlet @name="evil-trout" />
Dann werden alle .gjs-Dateien, die Sie im Verzeichnis connectors/evil-trout erstellen, automatisch angehängt. Wenn Sie also die Datei
plugins/hello/assets/javascripts/discourse/connectors/evil-trout/hello.gjs
mit folgendem Inhalt erstellen:
<template>
<b>Hallo Welt</b>
</template>
wird Discourse <b>Hallo Welt</b> an dieser Stelle im Template einfügen.
Beachten Sie, dass wir die Datei hello.gjs genannt haben – der Dateiname (im Gegensatz zum Verzeichnisnamen) ist nicht wichtig, muss aber über alle Plugins hinweg eindeutig sein. Es ist sinnvoll, ihn so zu benennen, dass er beschreibt, was Sie erweitern. Dies erleichtert das Debuggen in der Zukunft.
Fehlerbehebung
- Überprüfen Sie den Namen des Connectors noch einmal und stellen Sie sicher, dass er exakt mit dem Plugin-Namen übereinstimmt.
Weitere Informationen
Weitere Teile der Serie
Teil 1: Plugin-Grundlagen
Teil 2: Dieses Thema
Teil 3: Site-Einstellungen
Teil 4: git-Einrichtung
Teil 5: Admin-Oberflächen
Teil 6: Akzeptanztests
Teil 7: Veröffentlichen Sie Ihr Plugin
Dieses Dokument wird versioniert – schlagen Sie Änderungen auf GitHub vor.



