【发布时间】:2017-04-15 20:18:49
【问题描述】:
我想在我的布局中添加一个模板,该模板在每个页面上都有相同的数据。例如,每个页面侧边栏中的最近帖子列表。做这样的事情最好的方法是什么?
我研究了部分数据,看起来您从当前使用的控制器向它提供数据。如果我不想对每个控制器都这样做,我是否只需在路由器管道中添加一个插件来获取数据,然后将其馈送到部分控制器中?
【问题讨论】:
我想在我的布局中添加一个模板,该模板在每个页面上都有相同的数据。例如,每个页面侧边栏中的最近帖子列表。做这样的事情最好的方法是什么?
我研究了部分数据,看起来您从当前使用的控制器向它提供数据。如果我不想对每个控制器都这样做,我是否只需在路由器管道中添加一个插件来获取数据,然后将其馈送到部分控制器中?
【问题讨论】:
您可以根据需要创建视图和模板并将其添加到布局视图中。
例如:
# views/sidebar_view.ex
defmodule YourApp.SidebarView do
use YourApp.Web, :view
def recent_posts() do
Post.get_recent_posts()
end
end
<!-- templates/layout/sidebar.html.eex -->
<ul>
<%= for post <- recent_posts() do %>
<li><%= post.title %></li>
<% end %>
</ul>
最后,在你的布局中:
<!-- templates/layout/app.html.eex -->
<main role="main">
<%= render @view_module, @view_template, assigns %>
</main>
<aside role="complementary">
<%= render YourApp.SidebarView, "sidebar.html" %>
</aside>
【讨论】: