You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Phoenix布局中定义多个yield :something实现局部内容自定义?

用Phoenix多Yield块实现子页面追加页脚内容

没问题,这在Phoenix里用多yield块就能轻松实现,我给你一步步拆解:

1. 修改主布局文件,添加自定义Yield块

首先在你的main_layout.html.eex里,找到<footer>部分,新增一个命名的yield(比如叫:extra_footer_content),用来承载子页面要追加的内容。如果没有子页面填充这个块,它会默认渲染空内容(你也可以给它设置默认值)。

修改后的布局代码示例:

<html>
<head>
  <!-- 你的头部原有内容 -->
</head>
<body>
  <div class="main_content">
    <%= render(@view_module, @view_template, assigns) %>
  </div>
  <footer>
    <!-- 这里是你原有的页脚固定内容 -->
    <p>© 2024 我的网站</p>
    
    <!-- 新增的自定义yield块,用于子页面追加内容 -->
    <%= yield :extra_footer_content %>
  </footer>
</body>
</html>

如果你想给这个yield设置默认内容,可以这样写:

<%= yield :extra_footer_content, do: "<p>默认的额外页脚内容</p>" %>

2. 在需要追加内容的子页面中填充Yield块

对于需要在页脚追加内容的子页面(比如page/show.html.eex),使用content_for/2宏来定义要插入到:extra_footer_content块的HTML内容。

子页面代码示例:

<!-- 子页面的主内容,会渲染到main_content里 -->
<h1>文章详情页</h1>
<p>这是文章的正文内容...</p>

<!-- 定义要追加到页脚的专属内容 -->
<% content_for :extra_footer_content do %>
  <div class="article-footer-extra">
    <p>本文作者:张三</p>
    <a href="/articles">返回文章列表</a>
  </div>
<% end %>

原理说明

  • yield :xxx:在布局中标记一个可替换的区域,名称可以自定义(比如:sidebar、:header_extra都行)。
  • content_for :xxx do ... end:在子页面中为布局里的对应yield块提供内容。如果子页面没有定义这个块,布局里的yield就会渲染空(或你设置的默认值)。

这种方式不仅适用于页脚,你可以根据需求在布局的任何位置添加多个不同名称的yield块,实现更灵活的页面布局。

内容的提问来源于stack exchange,提问作者Ojrojako

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:54:01