所以我对jekyll和一般的流动性都很陌生,我做了一些搜索,但找不到我问题的具体答案。
所以基本上,我正在制作一个jekyll网站,需要尽可能容易的贡献者,因为不只有一个网站贡献者。考虑到这一点,我想知道是否有可能在构建上进行动态导航,在页面的前端采用自定义变量,如果它与顶级导航项匹配(金额不会改变),将页面链接放在所述导航项的下拉列表中。
举个例子,假设我有顶级导航项目:Color and Animal。如果贡献者想要添加一个名为“Duck”的页面,他可以放入他的前面的事情
parent: Animal
permalink: duck
并且,在构建时,jekyll将遍历每个页面,当它发生在页面'duck'时,它会将链接放入Animal导航项中作为下拉菜单。
我知道还有其他方法可以进行多级导航,如Jekyll文档中所述,但是每次都需要有人更改配置文件,除非我完全误解它。我希望贡献者只需要担心他正在制作的页面,我认为前面的事情是一个很好的地方。
编辑:我将提供我已经尝试过的东西,虽然,我认为我的代码会让你发笑,因为它可能会偏离并且可能过于复杂。以下代码假设配置中的导航数组包含带有“text”和“url”变量的顶级项目。并非所有人都有链接,可能只作为下拉菜单。它还假设页面上的变量称为“父文本”,这是匹配将发生的位置。
{% for link in site.navigation %} <a href="{{link.url}}">{{link.text}}</a>
{% for page in site.pages %}
{% if page.parent-text == true %}
<a href="{{page.permalink}}"> {{page.parent-text}} </a>
{% endif %}
{% endfor %}
{% endfor %}
我只是想让它输出。我稍后会处理样式和标记。
提前感谢大家!
答案 0 :(得分:2)
我要说的第一件事就是小心使用page
作为循环中的变量。 page
对于Jekyll(docs)具有特殊含义,并将其设置为循环或作为变量将覆盖它通常的工作方式。
我对你的例子感到有点困惑,为什么你要检查page.parent-text == true
。这只会检查相关文件是否与前面有关键parent-text
,但未设置为false
。您似乎想将其与导航链接的文本进行比较。这样的事情应该有效:
{% for link in site.navigation %}
<a href="{{link.url}}">{{link.text}}</a>
{% for my_page in site.pages %}
{% if my_page.parent == link.text %}
<a href="{{page.permalink}}"> {{page.title}} </a>
{% endif %}
{% endfor %}
{% endfor %}
您也可以使用a data file。假设您有一个文件_data/nav-links.yml
,如下所示:
- text: Animals
url: '/animals/'
dropdown:
- text: Duck
url: '/duck/'
- text: Goose
url: '/goose/'
然后,在你的导航中,你有:
{% for link in site.data.nav-links %}
<a href="{{ link.url }}">{{ link.text }}</a>
{% for sub_link in link.dropdown %}
<a href="{{ sub_link.url }}">{{ sub_link.text }}</a>
{% endfor %}
{% endfor %}
这会将相关信息隔离到自己的文件中,因此贡献者不必筛选此配置。如果您认为site.navigation
中的链接名称有可能发生变化,那么这是首选;如果他们中的任何一个做了,那么所有相关页面前面的相应parent
或parent-text
变量的所有也必须改变。