Я делаю это на двух страницах, которые я настроил в Джекиле.
Первое, что я делаю, это создаю запись внутри _config.yml с информацией обо всех страницах:
# this goes inside _config.yml. Change as required
navigation:
- text: What we do
url: /en/what-we-do/
- text: Who we are
url: /en/who-we-are/
- text: Projects
url: /en/projects/
layout: project
- text: Blog
url: /en/blog/
layout: post
Затем в моем основном макете я использую эту информацию для генерации навигационных ссылок. В каждой ссылке я сравниваю URL ссылки с URL текущей страницы. Если они равны, страница активна. В противном случае они не являются.
Существует пара особых случаев: во всех сообщениях блога должна быть ссылка «блог», а на первых страницах (на английском и испанском языках) не должна быть навигационная панель. В обоих случаях я полагаюсь на тот факт, что сообщения блога и первые страницы имеют определенные макеты (обратите внимание, что ссылки «Блог» и «Проект» в yaml имеют дополнительный параметр «макет»)
Код навигации генерируется так:
{% unless page.layout == 'front' %}
<ul class="navigation">
{% for link in site.navigation %}
{% assign current = nil %}
{% if page.url == link.url or page.layout == link.layout %}
{% assign current = 'current' %}
{% endif %}
<li class="{% if forloop.first %}first{% endif %} {{ current }} {% if forloop.last %}last{% endif %}">
<a class="{{ current }}" href="{{ link.url }}">{{ link.text }}</a>
</li>
{% endfor %}
</ul>
{% endunless %}
Мне все еще нужно помнить о добавлении записи в _config.yaml каждый раз, когда я добавляю новую страницу, а затем перезапускаю Jekyll, но сейчас это происходит очень редко.
Я думаю, навигационный yaml может входить в _include под названием "навигация" или что-то подобное, но я не пробовал использовать yaml внутри них, поэтому я не знаю, будет ли это работать. В моем случае, так как у меня есть многоязычный сайт, в конфигурации все проще (пропущенные переводы легче обнаружить)
Надеюсь, это поможет.