In the Phoenix Framework is there a common technique for setting a page title based on a route/path. Or is this just a matter of calling assign(:page_title, \"fred\")
A nice approach to handling titles is to realise that view is a module like every other one. This means you can define additional functions on it. On the other hand, in the layout you have access to the current view module - this means we can call the function we defined earlier.
Let's see how that would work in practice:
# The layout template
<title><%= @view_module.title(@view_template, assigns) %></title>
# In some view module
def title("show.html", _assigns) do
"My awesome page!"
end
Thanks to passing both template name and assigns to the title function it works exactly like render/2
- we can pattern match on the template name and have access to all the assigns. We're calling the function unconditionally on all the views, so it has to be defined on all the views - we could add some additional check with function_exported?/3
and some default fallback title, but I think being explicit and defining it in every view isn't that much work and makes for a simpler code.