2015-10-28 14 views
7

テンプレートのレイアウトを変更して、各コントローラアクション内でput_layoutメソッドを使用する適切/簡単な方法はありますか?異なるコントローラの異なるレイアウトを望む簡単な例は非常に反復的になり(以下)、フレームワーク内で何かが欠けているように感じます。フェニックスのテンプレート用に異なるレイアウトを使用する適切な方法

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 

答えて

16

私は、あなたがデフォルトのレイアウトを設定することで最も効果的かもしれないと思います。

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 
10

たとえば、あなたが管理パイプライン用plug :put_layout, {MyApp.LayoutView, :admin}を指定することができ、ルータに別々の管理パイプラインによってカバーされているすべての管理コントローラと言うために異なるレイアウトが必要な場合。私はhttp://www.cultivatehq.com/posts/how-to-set-different-layouts-in-phoenix/からそれを学びました。

関連する問題