中间人:在frontmatter中从数据文件中选择信息
Middleman: choosing information from data files in frontmatter
我正在使用 Middleman 静态页面生成器,我想从基于 frontmatter 制作的 selection 的数据文件中提取信息。
例子
我的数据文件位于 data/cta.yaml
,其中包含可以在不同页面上重复的不同变体的号召性用语文本,这意味着每个 CTA 文本可以在多个页面上使用。
data/cta.yaml
:
basic: This is default CTA
special: Something special here
other: Some other CTA
然后我有 layout.erb
:
<body>
<%= yield %>
<p class="cta">No data yet</p>
</body>
和test.html.erb
:
---
title: Some page for testing
cta: It works with layout if I do not reference 'data/cta.yaml'
---
Some page content.
如果我想使用,比方说,第一个 CTA 文本,我可以在 layout.erb
布局文件中使用 <p class="cta"><%= data.cta.basic %></p>
,或者将其从布局中删除并直接移动到 test.html.erb
模板文件。或者,我可以完全删除数据文件,只需在 frontmatter 中为每个页面键入 CTA 文本。但是,我更愿意将 CTA 文本保留在数据文件中,并将所有 HTML 保留在 layout.erb
中,然后能够从 cta.yaml
中的 "choose" 信息放在 test.html.erb
前言中。
我试图改变
<p class="cta"><%= data.cta.basic %></p>
在layout.erb
到
<p class="cta"><%= current_page.data.cta %></p>
然后在 test.html.erb
前言中:
---
title: Some page for testing
cta: data.cta.basic
---
但这导致逐字 data.cta.basic
文本而不是 cta.yaml
数据文件中的 "This is default CTA"。
问题
是否可以使用 frontmatter select 给定页面应使用数据文件中的哪个文本?
正如我在评论中提到的,前文在 ERB 之前被解析,这就是您看到 data.cta.basic
而不是正确的 cta 的原因。
虽然您可以添加一个助手来实现这一点。
这是我的帮手
module CtaHelpers
def page_cta
cta = current_page.data.cta
data.cta.send(cta)
end
end
这是我的 test.html.erb
文件:
---
cta: special
---
<p class="cta"><%= page_cta %></p>
test.html.erb
文件正在调用从 Frontmatter 确定要使用哪个 CTA 的帮助程序,因此输出为:
Something special here
我正在使用 Middleman 静态页面生成器,我想从基于 frontmatter 制作的 selection 的数据文件中提取信息。
例子
我的数据文件位于 data/cta.yaml
,其中包含可以在不同页面上重复的不同变体的号召性用语文本,这意味着每个 CTA 文本可以在多个页面上使用。
data/cta.yaml
:
basic: This is default CTA
special: Something special here
other: Some other CTA
然后我有 layout.erb
:
<body>
<%= yield %>
<p class="cta">No data yet</p>
</body>
和test.html.erb
:
---
title: Some page for testing
cta: It works with layout if I do not reference 'data/cta.yaml'
---
Some page content.
如果我想使用,比方说,第一个 CTA 文本,我可以在 layout.erb
布局文件中使用 <p class="cta"><%= data.cta.basic %></p>
,或者将其从布局中删除并直接移动到 test.html.erb
模板文件。或者,我可以完全删除数据文件,只需在 frontmatter 中为每个页面键入 CTA 文本。但是,我更愿意将 CTA 文本保留在数据文件中,并将所有 HTML 保留在 layout.erb
中,然后能够从 cta.yaml
中的 "choose" 信息放在 test.html.erb
前言中。
我试图改变
<p class="cta"><%= data.cta.basic %></p>
在layout.erb
到
<p class="cta"><%= current_page.data.cta %></p>
然后在 test.html.erb
前言中:
---
title: Some page for testing
cta: data.cta.basic
---
但这导致逐字 data.cta.basic
文本而不是 cta.yaml
数据文件中的 "This is default CTA"。
问题
是否可以使用 frontmatter select 给定页面应使用数据文件中的哪个文本?
正如我在评论中提到的,前文在 ERB 之前被解析,这就是您看到 data.cta.basic
而不是正确的 cta 的原因。
虽然您可以添加一个助手来实现这一点。
这是我的帮手
module CtaHelpers
def page_cta
cta = current_page.data.cta
data.cta.send(cta)
end
end
这是我的 test.html.erb
文件:
---
cta: special
---
<p class="cta"><%= page_cta %></p>
test.html.erb
文件正在调用从 Frontmatter 确定要使用哪个 CTA 的帮助程序,因此输出为:
Something special here