Override app/views/layouts/application.html.erb from a plugin
The discussion revolves around overriding the application.html.erb template from a plugin in Discourse. npflood seeks to load and cache a site header and footer from a primary website, but the provided HTML custom header option does not support caching or passing the I18n locale.
Two options are proposed: using JavaScript with outlets or overriding the application.html.erb template. The latter is preferred, but npflood cannot find a convention to override ERB templates from a plugin.
simon suggests overriding the set_layout method in application_controller.rb, and npflood confirms this solution works.
Later, neounix proposes a future plugin method register_view to simplify overriding views. riking suggests using a theme instead, but neounix points out that themes do not support embedded Ruby code.
Finally, riking revises their suggestion, proposing that the remote server push content into the HTML Footer section of a Theme Component, which could work with caching.
I have a very specific scenario where I need to load and cache the site header and footer from our primary website. This is fairly trivial to do in ERB:
<!-- My Customization -->
<% cache("footer_#{I18n.locale}", expires_in: 1.week) do %>
<%= raw open("https://myserver.com/#{I18n.locale}/remote/footer").read %>
<% end %>
<!-- End Customization -->
Note in my example that I am passing along the I18n locale as well.
Neither the caching nor passing the locale will work with the html custom header option provided with Discourse so I’m left with two options, both of which would need to be implemented as a plugin.
OPTION 1: Use Javascript
There are outlets placed where my header and footer would go, but I don’t know how to cache the requests and I can see this quickly becoming taxing on both the server and the Ember app if server-side caching is not used.
OPTION 2: Override the application.html.erb template
First off: I am very aware that I would have to keep my custom plugin in lock-step with any changes to Discourse to ensure that my override doesn’t interfere with upgrades.
This would be my preference but I can’t seem to find any convention that will let me override the ERB templates from a plugin.