Как получить доступ к `site.data.header [" foo.bar.baz "]` если `foo.bar.baz` является переменной FrontMatter - PullRequest
0 голосов
/ 17 октября 2019

Я хочу что-то вроде:

---
my_var: "foo.bar.baz"
---

{{- site.data.header[page.my_var] -}}

К сожалению, это не работает ...

Я знаю, что могу использовать site.data.header.foo.bar.baz или site.data.header["foo"]["bar"]["baz"], но это не так.

Также я знаю, что могу разбить page.my_var на подстроки и использовать их затем как site.data.header["foo"]["bar"]["baz"]. Но это увеличивает время сборки Jekyll.

Полагаю, мне нужен какой-нибудь плагин Ruby, но я его не знаю, и я не знаю, как его написать.

Если вы знаете,такой плагин или может помочь мне написать один или знать какой-то родной обходной путь, это было бы так здорово!

Help:)

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

То, что мы надеемся сделать, было заблокировано проектом.

site.data["foo.bar.baz"] подразумевает, что вам нужен файл данных с именем foo.bar.baz.yml или foo.bar.baz.json, ... и т. Д.

Но Jekyll очищает имена файлов данных и, следовательно, полученный объект будет иметь только ключ с именем "foobarbaz"

Плагин, который намеренно удаляет эту очистку, может быть записан, но он не появитсябыть мягким или безопасным для конечных пользователей. Так что шансы найти такой плагин в дикой природе невелики ..

0 голосов
/ 17 октября 2019

Также я знаю, что могу разделить page.my_var на подстроки и использовать их затем как site.data ["foo"] ["bar"] ["baz"]. Но это увеличивает время сборки Jekyll.

Я не уверен, что вы можете сделать это. И даже если вы можете, я не уверен, что это реально повлияет на производительность.

Но вы можете сделать это:

_data / foo.yml

bar:
  baz: 1
  biz: 2
  buz: 3
beer:
  baz: 1
  biz: 2
  buz: 3

Тогда:

---
my_var: "foo.bar.baz"
---
{% assign keys = page.my_var | split: "." %}
{% assign object = site.data %}
{% for key in keys %}
  {% assign object = object[key] %}
{% endfor %}
{{ object }}
...