Я использую генератор статических страниц Middleman, и я хотел бы извлекать информацию из файлов данных на основе выбора, сделанного в предварительном порядке.
Пример
У меня есть файл данных, расположенный по адресу data/cta.yaml
, с различными вариантами текста призыва к действию, который может повторяться на разных страницах, что означает, что каждый текст призыва к действию можно использовать более чем на одной странице.
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, я могу использовать <p class="cta"><%= data.cta.basic %></p>
либо в layout.erb
файле макета, либо удалить его из макета и переместить прямо в конец файла шаблона test.html.erb
. Или я мог бы полностью отбросить файл данных и просто ввести текст CTA для каждой страницы в начале. Однако я бы предпочел сохранить текст CTA в файле данных и весь HTML в layout.erb
, а затем иметь возможность «выбирать» информацию из cta.yaml
в test.html.erb
frontmatter.
Я пытался изменить
<p class="cta"><%= data.cta.basic %></p>
in layout.erb
to
<p class="cta"><%= current_page.data.cta %></p>
а затем в test.html.erb
frontmatter:
---
title: Some page for testing
cta: data.cta.basic
---
но это привело к дословному data.cta.basic
тексту вместо «Это CTA по умолчанию» из cta.yaml
файла данных.
Вопрос
Можно ли вообще использовать frontmatter, чтобы выбрать, какой текст из файла данных следует использовать для данной страницы?
test.html.erb
, а иногда хотите ссылаться на CTA, удерживаемую вdata/cta.yml
, из передней частиtest.html.erb
? - person Andy Stabler   schedule 19.04.2017data/cta.yaml
, из передней частиtest.html.erb
. Все дело в том, чтобы редактировать CTA в одном месте (data/cta.yaml
) без необходимости редактировать его вручную на каждой странице, которая использует этот текст (если текст изменится в будущем). Ручной текст CTA был там, чтобы показать, что он работает при вводе вручную;) - person Rafal   schedule 20.04.2017