# Arbeiten mit .erb-Templates in einem Plugin

**URL:** https://meta.discourse.org/t/working-with-erb-templates-in-a-plugin/345777
**Category:** Developers
**Created:** [6. Januar 2025 um 09:12 UTC](https://meta.discourse.org/t/working-with-erb-templates-in-a-plugin/345777 "2025-01-06T09:12:26Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![angus](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/angus/32/341715_2.png) [@angus](https://meta.discourse.org/u/angus)
#### Post date: [6. Januar 2025 um 09:12 UTC](https://meta.discourse.org/t/working-with-erb-templates-in-a-plugin/345777/1 "2025-01-06T09:12:26Z")

</div>

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.

> **[Layouts and Rendering in Rails — Ruby on Rails Guides](https://guides.rubyonrails.org/layouts_and_rendering.html)**
>
> Layouts and Rendering in RailsThis guide covers the basic layout features of Action Controller and Action View.After reading this guide, you will know: How to use the various rendering methods built into Rails. How to create layouts with multiple...

### Server-Plugin-Outlets

Server-Plugin-Outlets funktionieren ähnlich wie [Client-Plugin-Outlets](https://meta.discourse.org/t/using-plugin-outlet-connectors-from-a-theme-or-plugin/32727), 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:

```plaintext
<%= server_plugin_outlet [name] %>

```

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

> **[discourse/plugins/chat/app/views/connectors/unsubscribe\_options at main ·...](https://github.com/discourse/discourse/tree/main/plugins/chat/app/views/connectors/unsubscribe_options)**
>
> A platform for community discussion. Free, open, simple. - discourse/discourse

### 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:

```plaintext
<%= 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.

```rb
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:

> <https://github.com/discourse/discourse-solved/blob/3f724bf3114cc7877fa757bc8035f13a7390c739/plugin.rb#L263C26-L263C58>

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:

> **[Action View Overview — Ruby on Rails Guides](https://guides.rubyonrails.org/v5.1/action_view_overview.html#view-paths)**

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:

```plaintext
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:

```rb
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.
