我在 Jekyll 中设置的两页中执行此操作。
我要做的第一件事是在 _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,所以我不知道它是否会起作用。就我而言,由于我有一个多语言站点,因此将所有内容都包含在配置中会更容易(缺少翻译更容易发现)
我希望这有帮助。