He estado dando algunos consejos sobre cómo trabajar con plantillas .erb en Discourse recientemente y noté que no hay muchos detalles al respecto aquí en meta, así que pensé en iniciar esta wiki sobre el tema. Esta wiki asume que sabes qué son las plantillas .erb y cuál es su función en Discourse y en Rails en general. Si deseas más detalles sobre ese contexto, lee esto primero.
Salidas de complementos del servidor
Las salidas de complementos del servidor funcionan de manera similar a las salidas de complementos del cliente, aunque solo hay unas pocas. Te permiten insertar tu propia plantilla .erb en una plantilla .erb de discourse/discourse. Se definen de esta manera:
<%= server_plugin_outlet [name] %>
Como ejemplo, consulta el uso de la salida unsubscribe_options en el complemento de chat:
Constructores de HTML
Los constructores de HTML están diseñados para HTML estándar que se construye dinámicamente, en lugar de usar plantillas y salidas de complementos. Para usar constructores de HTML en plantillas .erb, busca estos puntos de inserción:
<%= build_plugin_html [name] %>
Puedes insertar HTML en estos puntos devolviéndolo a un bloque register_html_builder en tu plugin.rb, es decir:
register_html_builder([name]) do |controller|
## construye y devuelve tu HTML personalizado
end
Como ejemplo, consulta el uso de server:before-head-close-crawler en el complemento solved:
En realidad, puedes registrar constructores de HTML para agregar también HTML del lado del cliente, sin embargo, no se recomienda. Agrega HTML del lado del cliente usando las salidas y plantillas de complementos del lado del cliente.
De manera similar, también existe un método de API de complementos del lado del servidor llamado register_custom_html, que se puede usar para fines similares, sin embargo, a menos que tengas una razón específica para hacerlo y sepas lo que estás haciendo, no lo usaría.
Anular una plantilla
Puedes anular las plantillas .erb de un complemento agregando las vistas de tu complemento a las view_paths de un controlador. Esto es solo Rails y no es específico de Discourse. Cómo funciona esto se cubre en las guías de rails aquí:
Por ejemplo, si deseas anular app/views/email/unsubscribed.html.erb, deberás hacer dos cosas:
Estructura las vistas de tu complemento usando el mismo espacio de nombres
Tu plantilla debería estar aquí:
your-plugin-folder/app/views/email/unsubscribed.html.erb
Anteponer la ruta de las vistas de tu complemento al controlador relevante
En este caso, el controlador relevante es EmailController. Agrega lo siguiente a tu archivo plugin.rb:
EmailController.prepend_view_path File.expand_path("../views", __FILE__)
Podrías agregar las vistas de tu complemento a las rutas de vista globales, sin embargo, en la mayoría de los casos no es necesario.