Я совершенно новичок в Джекилле. Я сделал что-то вроде этого:
{% assign top_nav = site.data.menus %}
{% if site.data.orgs[site.orgData].menus %}
{% assign top_nav = site.data.orgs[site.orgData].menus %}
{% endif %}
<ul>
{% for menu in top_nav %}
<li>
<a href="{{ menu.url }}">{{ menu.title }}</a>
</li>
{% endfor %}
</ul>
По сути, я возьму массив элементов навигации из папки по умолчанию. Но если я замечу наличие меню для определенной c организации, то я переопределю меню, предоставляемое папкой по умолчанию.
Что мне не нравится в этом подходе, так это то, что у меня сейчас есть сотни места в моих шаблонах jekyll, которые делают это, если оператор проверки. Если бы это был какой-либо другой язык программирования сценариев, я бы определил такую функцию, как function($org_name,$prop) {return $site.data.orgs[$org_name][$prop] ? $site.data.orgs[$org_name][$prop] : $site.data[$prop]; }
. Каким был бы идиоматический способ достижения той же цели в Джекиле?
Я попробовал вариант предложения Дэвида Жакеля, выполнив это
. / Org_var. html
{% assign prop = include.prop %}
{% assign orgVar = site.data[prop] %}
{% if site.data.orgs[site.orgData][prop] %}
{% assign orgVar = site.data.orgs[site.orgData][prop] %}
{% endif %}
. / _ include / nav. html
{% include_relative ../org_var.html prop=menus %}
{% for menu in orgVar %}
... print menu items
. / _ layout / header. html
{% include_relative ../org_var prop='electronics.televisions' %}
{% for tv in orgVar%}
{{ tv.modelName }}
... print tv values
{% endfor %}
Но я получаю синтаксическая ошибка в ../org_var.html
, говоря {% include_relative file.ext param='value' param2='value' %}
. В документации сказано, что я не могу использовать относительный путь с include
или include_relative
. Как сделать мою org_var.html
универсальной и многократно используемой функцией? И будет ли electronics.televisions
даже правильно оценивать правильный путь моей site.data.org.[site.orgData][...path]
переменной?