Phoenix 如何设定不同页面 Layouts

默认 layout 是 templates/layout/app.html.eex 这个文件,但是加入我们想设定不同页面采用不同的 layout,该怎么做呢?

1. 修改 Controller Render 函数

通过传入 render layout 参数

def index(conn, _params) do
  render conn, "index.html",
             layout: {MyApp.LayoutView, "admin.html"}
end

这样我们可以单独控制 controller 中每个方法的渲染 layout。

2. 修改 Controller 总体 Layout

defmodule MyApp.Admin.SomeController do
  use MyApp.Web, :controller

  plug :put_layout, "admin.html"

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

我们在 controller 中引入 :put_layout 这个 plug

3. 在 Router 中修改总体 Layout

# web/router.ex
pipeline :admin_layout do
  plug :put_layout, {MyApp.LayoutView, :admin}
end

scope "/admin", MyApp do
  pipe_through [:browser, :admin_layout]
  resources "/some_path", Admin.SomeController
end

我们可以在 Router 中添加 plug 来修改一个 scope 下所有页面的 layout

总结

  • 修改单独页面:方法1
  • 修改某 controller 所有页面:方法2
  • 修改某路由所有页面:方法3

你可能感兴趣的:(Phoenix 如何设定不同页面 Layouts)