JDanielMartinez

JDanielMartinez

Use template into others with different view and router

Hi! May someone helps me, please? I am trying to render a template into another template. My objective is to create a generic template with two links to log in or log out with the help of Ueberauth, and I want this template to appear in all the pages of my website.

This is the template that I have:

<section>
        <ul class="right">
              <%= if @conn.assigns[:user] do %>
                <li>
                  <%= link "Sign Out", to: auth_path(@conn, :signout) %>
                </li>
              <% else %>
                <li>
                  <%= link "Google Sign In", to: auth_path(@conn, :request, "google")%>
                </li>
              <% end%>
            </ul>
</section>

These are my templates and views files trees:

templates
    layouts
        auth
            auth.html.eex
        app.html.eex
    page
        index.html.eex
views
    auth_view.ex
    error_helpers.ex
    error_helpers.ex
    error_view.ex
    layout_view.ex
    page_view.ex

I just want to know how to insert the auth.html.eex into other templates. For example, at this moment I am just trying to insert it into the index page of Phoenix (The one that appears the first time yo create a new project).

I will appreciate if someone can help me.

Marked As Solved

kokolegorille

kokolegorille

What You need is shared views…

Also Liked

kokolegorille

kokolegorille

As a sidenote I do it a little bit differently than in the link.

Often I add a helpers folder in lib/any_web/helpers. I add a bootstrap_helper, with corresponding view, and template folder. I add it globally in any_web.ex, like this…

  def view do
    quote do
      use Phoenix.View,
        root: "lib/any_web/templates",
        namespace: AnyWeb

      # Import convenience functions from controllers
      import Phoenix.Controller, only: [get_flash: 1, get_flash: 2, view_module: 1]

      # Use all HTML functionality (forms, tags, etc)
      use Phoenix.HTML

      # Here I import some custom helpers
      import AnyWeb.Helpers.CheckboxHelper
      import AnyWeb.Helpers.BootstrapHelper
      import AnyWeb.Helpers.WaffleHelper
      import AnyWeb.Helpers.BaseHelper

      import AnyWeb.ErrorHelpers
      import AnyWeb.Gettext
      alias AnyWeb.Router.Helpers, as: Routes
    end
  end

These are 2 simple functions I put in helper. One is using content_tag, one render a template.

defmodule AnyWeb.Helpers.BootstrapHelper do
  @moduledoc """
  This is the documentation for the Bootstrap 4 helpers.
  It includes also fa helper, for Font awesome
  """
  use Phoenix.HTML

...

  def flash(message, mode) do
    class = "alert alert-#{mode} alert-dismissible fade show"
    content_tag(:div, class: class, role: "alert") do
      [
        message,
        content_tag(:button, type: :button, class: :close, "data-dismiss": :alert, "aria-label": "Close") do
          content_tag(:span) do
            raw("&times;")
          end
        end
      ]
    end
  end

  @doc """
  Dropdown helper
  """
  def dropdown(options \\ []) do
    render("dropdown.html", options)
  end

Then, in any template, I have access to helper functions to simplify building components. Like this…

<%= flash("hello world", "alert") %>

The main difference with the linked example is I import helpers…

If one day I decide to change css framework, I would just replace bootstrap helper with a new one.

Where Next?

Popular in Questions Top

chokchit
** (DBConnection.ConnectionError) connection not available and request was dropped from queue after 2733ms. You can configure how long re...
New
nobody
How to bind a phoenix app to a specific ip address? could not find anything about that, nowhere, unfortunately, but for me this is quite...
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
shahryarjb
Hello, I get Persian date from my client and convert it to normal calendar like this: def jalali_string_to_miladi_english_number(persi...
New
fireproofsocks
Forgive me if this is obvious, but how does one delete a database record WITHOUT selecting it first? Ecto.Repo — Ecto v3.14.0 has exampl...
New
jerry
Good day to you all. I have been struggling to get a query involving like and ilike to work. Can anyone assist me on this, please? pro...
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
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
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

Other popular topics Top

hariharasudhan94
lets say i have a sample like a = 20; b = 10; if (a &gt; b) do {:ok, "a"} end if (a &lt; b) do {:ok, b} end if (a == b) do {:ok, "equa...
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
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod – where is this set? Thanks.
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New
Qqwy
Original source of discussion: This topic on the Pragmatic Programmers’ Functional Web Development with Elixir, OTP, and Phoenix forum. ...
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
grych
Hi folks, Few months ago I have announced the proof-of-concept of the library to manipulate the browsers DOM objects directly from Elixi...
639 52673 488
New
saif
Hello everyone, Long time lurker first time poster here. I’ve recently begun working on Elixir full-time again! :raised_hands: It’s been...
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
PeterCarter
There are pre-rolled solutions for other frameworks that do work. However, Phoenix does not seem to have these. Have people had good expe...
New

Latest on Elixir Forum

Elixir Forum

We're in Beta

About us Mission Statement