Elixir Phoenix Partials
How to create partials in Elixir with block like syntax. Like: ``` = render_shared "page_header.html", title: "Listing Posts", body: fn -> = link "New Post", class: 'btn btn-sm btn-outline-secondary', to: post_path(@conn, :new) ```
How to create partials in Elixir with block like syntax. Like:
= render_shared "page_header.html", title: "Listing Posts", body: fn ->
= link "New Post", class: 'btn btn-sm btn-outline-secondary', to: post_path(@conn, :new)
Create a SharedView
module to hold the shared templates.
defmodule SampleAdmin.SharedView do
use SampleAdmin, :view
end
Create a Helpers
module that we'll add to all views. This is where we'll
create the render_shared
function.
defmodule SampleAdmin.Helpers do
alias Phoenix.View
def render_shared(template, assigns \\ []) do
View.render(SampleAdmin.SharedView, template, assigns)
end
end
Add Helpers
to all Views in the root module SampleAdmin
in this case.
def view do
quote do
...
import SampleAdmin.Helpers
end
end
Create the shared template in templates/shared
. In here you need to
check if the body
was assigned & if so then render the output
by calling the function. Could probably make sure it is a function
in the render_shared
function.
.d-flex.justify-content-between.flex-wrap.flex-md-nowrap.align-items-center.pt-3.pb-2.mb-3.border-bottom
h1= assigns[:title]
= if assigns[:body] do
.btn-toolbar.mb-2.mb-md-0
.btn-group.mr-2
= assigns[:body].()
The SharedView
& Helpers
setup is optional, but I like having them setup.
References
Webmentions
These are webmentions via the IndieWeb and webmention.io. Mention this post from your site: