Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Proper way to use different Layouts for Templates in Phoenix

Is the proper/simplest way to change the Layout of a Template to use the put_layout method within each Controller action? A simple example of wanting a different Layout for different Controllers seems to become very repetitive (below) so it feels like I'm missing something within the framework.

defmodule MyPhoenix.AController do 
    use MyPhoenix.Web, :controller

    def pageOne(conn, _params) do
        conn
        |> put_layout("LayoutA.html")
        |> render "page1.html" 
    end

    def pageTwo(conn, _params) do 
        conn
        |> put_layout("LayoutA.html")
        |> render "page2.html" 
    end
end

defmodule MyPhoenix.BController do 
    use MyPhoenix.Web, :controller

    def pageOne(conn, _params) do
        conn
        |> put_layout("LayoutB.html")
        |> render "page1.html" 
    end

    def pageTwo(conn, _params) do 
        conn
        |> put_layout("LayoutB.html")
        |> render "page2.html" 
    end
end
like image 249
paaschpa Avatar asked Oct 28 '15 19:10

paaschpa


2 Answers

I think you might be best off by setting a default layout.

defmodule MyPhoenix.AController do 
    use MyPhoenix.Web, :controller

    plug :put_layout, "LayoutA.html"

    def pageOne(conn, _params) do
        render conn, "page1.html"
    end

    def pageTwo(conn, _params) do 
        render conn, "page2.html" 
    end
end

defmodule MyPhoenix.BController do 
    use MyPhoenix.Web, :controller

    plug :put_layout, "LayoutB.html"

    def pageOne(conn, _params) do
        render conn, "page1.html" 
    end

    def pageTwo(conn, _params) do 
        render conn, "page2.html"
    end
end
like image 185
Donovan Dikaio Avatar answered Nov 17 '22 21:11

Donovan Dikaio


If for example you need a different layout for say all admin controllers which are covered by separate admin pipeline in the router you can specify plug :put_layout, {MyApp.LayoutView, :admin} for the admin pipeline. I learned it from http://www.cultivatehq.com/posts/how-to-set-different-layouts-in-phoenix/.

like image 37
Uģis Ozols Avatar answered Nov 17 '22 20:11

Uģis Ozols