zimt28

zimt28

"Reusable Templates in Phoenix" blog post question

Hi everyone!

I just found this post (Reusable Templates in Phoenix) by @danielberkompas. I also write server side components in Phoenix and would like to know how you write your templates!

My code looks like this:

web/templates/user_account/edit.eex
<%= top_bar do %>
  <%= top_bar_title gettext("Edit user account") %>
  <%= top_bar_submit gettext("Update"), form: "user_account_form" %>
  <%= top_bar_link gettext("Back"), to: user_account_path(@conn, :index) %>
<% end %>

<%= render "form.html", changeset: @changeset,
                        action: user_account_path(@conn, :update, @user_account) %>
web/templates/user_account/form.eex
<%= form_for @changeset, @action, [id: "user_account_form"], fn f -> %>
  <%= box do %>
    <%= box_heading gettext("Security") %>
    <%= box_password_input f, :password, gettext("Password") %>
    <%= box_password_input f, :password_confirmation, gettext("Password confirmation") %>
    <%= hidden_input f, :employee_id %>
  <% end %>
<% end %>
web/templates/components.ex
defmodule App.Components do
  use App.Web, :view

  defmacro __using__(_) do
    quote do
      import App.Components, except: [render: 2, template_not_found: 2]
    end
  end

  def top_bar(do: content) do
    ~E"""
      <div class="top-bar w-clearfix">
        <%= content %>
      </div>
    """
  end

  def top_bar_title(title) do
    ~E"""
      <div class="top-bar-heading"><%= title %></div>
    """
  end

  def top_bar_subtitle(subtitle) do
    ~E"""
      <div class="top-bar-subheading">(<%= subtitle %>)</div>
    """
  end

  def top_bar_link(title, attributes \\ []) do
    link(title, [class: "button top-bar-button"] ++ attributes)
  end

  def top_bar_submit(title, attributes \\ []) do
    submit(title, [class: "button top-bar-button"] ++ attributes)
  end

  # ...
end

Can you tell me if using ~E is faster or slower than function call like content_tag/2?

Most Liked

NobbZ

NobbZ

Ah, thank you.

So on a first glance it seems, as if sigil_e and sigil_E do a lot of stuff at compile time, while content_tag/2 is more work at runtime.

So if you use the sigil variants it should run faster but might take longer to compile, but to know it for sure which one is better in which situation, you might need to bench

NobbZ

NobbZ

I can not find a sigil_E in elixir, eex, nor phoenix. So it is hard tell whithout knowing about its implementation‌…

manukall

manukall

sigil_E is from phoenix_html: Phoenix.HTML — Phoenix.HTML v4.3.0

Where Next?

Popular in Questions Top

lastday4you
I wanted to check elixir version in phoenix because i found that my elixir is 1.5 but when i use Enum.chunk_by it said the function is un...
New
gshaw
What is the idiomatic way of matching for not nil in Elixir? E.g., First way: defp halt_if_not_signed_in(conn, signed_in_account) when...
New
LegitStack
I’m trying to make a websocket server in Phoenix or raw Elixir. I heard about gun, I think I could use cowboy, but since I’m not that sma...
New
Emily
I have VueJS GUIs with the project generated using Webpack. I have Elixir modules that will need to be used by the VueJS GUIs. I forese...
New
sergio_101
I am VERY much an elixir newbie. I have taken one elixir course and one phoenix course on Udemy. During that course, I saw the instructor...
New
shijith.k
I am trying to start a new phoenix project with elixir 1.9, but mix phx.new does not work. It says that ** (Mix) The task "phx.new" could...
New
dotdotdotPaul
Okay, I’m having a heck of a time trying to figure out how to best handle the validation of belongs_to associations in Ecto. I’m sure I’...
New
hariharasudhan94
I would like to know what is the best IDE for elixir development?
New
hariharasudhan94
Lets say I have map like this fetching from my database %{"_id" =&gt; #BSON.ObjectId&lt;58eb1a7a9ad169198c3dXXXX&gt;, "email" =&gt; ...
New
dokuzbir
I want to highlight html closing tags when i click a html tag. That works in .html files but doesnt work for html.eex templates. How can...
New

Other popular topics Top

Harrisonl
We have an ECS cluster with 4 services, where each task joins a single cluster, via discovery ECS discovery service. Currently when I de...
New
marius95
Hello everyone, I try to use an Javascript Event Handler in my root.html.leex file. Therefore I created a function in the app.js file: ...
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID&lt;0.412.0&gt; terminating ** (Postgrex.Error) FATAL...
New
shahryarjb
Hello, I have map which I want to convert it to string like this: the map: %{last_name: "tavakkoli", name: "shahryar"} the string I ne...
New
johnnyicon
Hi all, I’ve just started learning Elixir and Phoenix Framework, so please pardon my n00bness at this stage. I’m trying to use Postgres...
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
dblack
I’ve got an issue with an app and I’ve no idea of how to troubleshoot it. I’m hoping someone here might have seen something similar. I p...
New
Qqwy
Update: How to use the Blogs &amp; Podcasts section You can post links to your blog posts or podcasts either in one of the Official Blog...
3271 127089 1222
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
dokuzbir
I want to highlight html closing tags when i click a html tag. That works in .html files but doesnt work for html.eex templates. How can...
New

We're in Beta

About us Mission Statement