Arbeiten mit .erb-Templates in einem Plugin

Ich habe kürzlich Ratschläge gegeben, wie man mit .erb-Vorlagen in Discourse arbeitet, und festgestellt, dass es hier im Meta keine vielen Details gibt. Daher dachte ich, ich beginne dieses Wiki zu diesem Thema. Dieses Wiki geht davon aus, dass Sie wissen, was .erb-Vorlagen sind und welche Funktion sie in Discourse und allgemeiner in Rails haben. Wenn Sie mehr Details zu diesem Hintergrund wünschen, lesen Sie bitte zuerst dies.

Server-Plugin-Outlets

Server-Plugin-Outlets funktionieren ähnlich wie Client-Plugin-Outlets, obwohl es nur wenige davon gibt. Sie ermöglichen es Ihnen, Ihre eigene .erb-Vorlage in eine discourse/discourse .erb-Vorlage einzufügen. Sie werden wie folgt definiert:

<%= server_plugin_outlet [name] %>

Ein Beispiel für die Verwendung des unsubscribe_options-Outlets im Chat-Plugin finden Sie hier:

HTML-Builder

HTML-Builder sind für Standard-HTML konzipiert, das dynamisch erstellt wird, anstatt Vorlagen und Plugin-Outlets zu verwenden. Um HTML-Builder in .erb-Vorlagen zu verwenden, suchen Sie nach diesen Einfügepunkten:

<%= build_plugin_html [name] %>

Sie können HTML an diesen Stellen einfügen, indem Sie es in einem register_html_builder-Block in Ihrer plugin.rb zurückgeben, d. h.

register_html_builder([name]) do |controller|
   ## Erstellen und geben Sie Ihr benutzerdefiniertes HTML zurück
end

Ein Beispiel für die Verwendung von server:before-head-close-crawler im Solved-Plugin finden Sie hier:

Sie können tatsächlich HTML-Builder registrieren, um auch clientseitiges HTML hinzuzufügen, dies wird jedoch nicht empfohlen. Fügen Sie clientseitiges HTML über die clientseitigen Plugin-Outlets und Vorlagen hinzu.

In ähnlicher Weise gibt es auch eine serverseitige Plugin-API-Methode namens register_custom_html, die für ähnliche Zwecke verwendet werden kann. Wenn Sie jedoch keinen bestimmten Grund dafür haben und wissen, was Sie tun, würde ich sie nicht verwenden.

Eine Vorlage überschreiben

Sie können .erb-Vorlagen aus einem Plugin überschreiben, indem Sie die Ansichten Ihres Plugins zu den view_paths eines Controllers hinzufügen. Dies ist einfach Rails und nicht spezifisch für Discourse. Wie dies funktioniert, wird in den Rails-Guides hier behandelt:

Wenn Sie beispielsweise app/views/email/unsubscribed.html.erb überschreiben möchten, müssen Sie zwei Dinge tun:

Strukturieren Sie Ihre Plugin-Ansichten mit demselben Namespace

Ihre Vorlage sollte sich hier befinden:

your-plugin-folder/app/views/email/unsubscribed.html.erb

Fügen Sie den Pfad Ihrer Plugin-Ansichten vor den relevanten Controller ein

In diesem Fall ist der relevante Controller EmailController. Fügen Sie Folgendes zu Ihrer plugin.rb-Datei hinzu:

EmailController.prepend_view_path File.expand_path("../views", __FILE__)

Sie könnten die Ansichten Ihres Plugins zu den globalen Ansichtspfaden hinzufügen, aber in den meisten Fällen ist dies nicht notwendig.

8 „Gefällt mir“