【问题标题】:Middleman: choosing information from data files in frontmatter中间人:从 frontmatter 中的数据文件中选择信息
【发布时间】: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 布局文件中使用 &lt;p class="cta"&gt;&lt;%= data.cta.basic %&gt;&lt;/p&gt; 或将其从布局中删除并将其直接移动到 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


【解决方案1】:

正如我在评论中提到的,frontmatter 在 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 的帮助程序,因此输出为:

这里有一些特别的东西

【讨论】:

  • 完美运行!我在我的布局中使用了&lt;%= page_cta %&gt;(如最初预期的那样,但它也适用于答案中所示的页面模板)并将助手放在我的config.rb 中(而不是将其保存为单独的模块。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2013-04-04
相关资源
最近更新 更多