如何在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
相关产品推荐
相关产品推荐

