【发布时间】:2017-09-13 20:56:18
【问题描述】:
我正在使用 Middleman 静态页面生成器,我想根据 frontmatter 中的选择从数据文件中提取信息。
示例
我的数据文件位于 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 中的 test.html.erb frontmatter 中“选择”信息。
我试图改变
<p class="cta"><%= data.cta.basic %></p>
在layout.erb到
<p class="cta"><%= current_page.data.cta %></p>
然后在test.html.erbfrontmatter:
---
title: Some page for testing
cta: data.cta.basic
---
但这会导致 data.cta.basic 数据文件中的“这是默认 CTA”逐字显示文本。
问题
是否有可能使用 frontmatter 从数据文件中选择应该用于给定页面的文本?
【问题讨论】:
-
您所描述的是预期的行为,因为在 ERB 之前解析了frontmatter。我是否认为您有时想在
test.html.erb的前端设置手动 CTA,有时想从test.html.erb的前端引用data/cta.yml中保存的 CTA? -
不完全是:对于大多数页面(使用特定布局的页面,其中包括带有“cta”类的段落),我希望能够从
test.html.erb的前端引用data/cta.yaml中的 CTA。重点是在一个地方(data/cta.yaml)编辑 CTA,而无需在使用该文本的每个页面上手动编辑它(如果将来文本更改)。 “手动 CTA 文本”表明它在手动输入时有效;)
标签: ruby yaml middleman static-pages middleman-4