Jekyll front matter变量到动态导航?

Jekyll front matter变量到动态导航?,jekyll,liquid,Jekyll,Liquid,所以我对jekyll和liquid基本上都是新手,我做了一些搜索,没有找到我的问题的具体答案 所以,基本上,我正在制作一个jekyll站点,它需要尽可能地方便贡献者,因为不仅仅只有一个站点贡献者。考虑到这一点,我想知道是否有可能在构建中创建一个动态导航,在页面的前端使用一个自定义变量,如果它匹配顶级导航项(数量不会改变),则将页面链接放在所述导航项的下拉列表中 例如,假设我有顶级导航项:颜色和动物。如果一个投稿人想添加一个名为“Duck”的页面,他可以把它放在首页 parent: Animal

所以我对jekyll和liquid基本上都是新手,我做了一些搜索,没有找到我的问题的具体答案

所以,基本上,我正在制作一个jekyll站点,它需要尽可能地方便贡献者,因为不仅仅只有一个站点贡献者。考虑到这一点,我想知道是否有可能在构建中创建一个动态导航,在页面的前端使用一个自定义变量,如果它匹配顶级导航项(数量不会改变),则将页面链接放在所述导航项的下拉列表中

例如,假设我有顶级导航项:颜色和动物。如果一个投稿人想添加一个名为“Duck”的页面,他可以把它放在首页

parent: Animal
permalink: duck
而且,在构建之后,jekyll将浏览每个页面,当它出现在“duck”页面时,它会将链接作为下拉菜单放入动物导航项中

我知道还有其他方法可以进行多级导航,如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 %}
{%用于site.navigation%}
{site.pages%中的页面为%s}
{%if page.parent-text==true%}
{%endif%}
{%endfor%}
{%endfor%}
我只是想把它输出。稍后我将处理样式和标记


提前谢谢大家

我要说的第一件事是小心使用
page
作为循环中的变量
page
对Jekyll()有特殊意义,将其设置在循环中或作为变量将覆盖其通常的工作方式

使用前置物 我对您的示例有点困惑,为什么要检查
page.parent-text==true
。这仅检查所涉及的文件是否具有某个键
父文本的前置内容,该键未设置为
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 %}
然后,在导航中,您有:

{% 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.data.nav-links%}
{link.dropdown%}
{%endfor%}
{%endfor%}
这将相关信息隔离到它自己的文件中,因此贡献者不必筛选此配置。如果您认为
站点中链接的名称有可能发生变化,则最好使用此选项。导航
将发生变化;如果其中任何一个发生了变化,那么所有相关页面前面的所有相应的
父项
父项文本
变量也必须发生变化

{% 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 %}