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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容