首页 文章

Jekyll:我可以合并馆藏和数据文件吗?

提问于
浏览
0

简短版本:如何在Liquid中按变量引用集合?

我正在Jekyll上 Build 一个网站,这是一个包含多个不同部分的文档 . 它由文章集合组成,没有博客文章 . 现在我有一个用数据文件定义的三级菜单结构,其中第三级是实际文章 . 数据文件看起来像这样 .

menu.yml

- title: Book
  url: book
  subpages: 
  - title: Volume 1
    url: book/vol1
  - title: Volume 2
    url: book/vol2
- title: The Library
  url: library
  subpages: 
  - title: Getting started
    url: library/getting-started
  - title: Components
    url: library/components
- title: Theme
  url: theme
  subpages: 
  - title: Tutorials
    url: theme/tutorials
  - title: Reference
    url: theme/reference

此外,我定义了与url匹配顶级项目的集合 .

_config.yml

...
collections:
  book:
    output: true
  library:
    output: true
  theme:
    output: true

现在我使用菜单YML构建一个漂亮的两级结构,并将文章放入其中以形成第三级 . 问题是我在构建菜单时不知道如何动态调用集合 . 例如,当我创建“Book”菜单项时,我想循环遍历site.book数据集合,如下所示:

{% assign collection = 'book' %}
{% for p in site.{{collection}} %}
  <p>{{p.title}}</p>
{% endfor %}

site.{{collection}} 在那里不起作用,但例如直接调用 site.book . 我不知道如何在Liquid中传递变量 .

我解决这个问题的方法是,对于我创建的每个菜单项,我遍历整个站点中包含所有文章的整个 {{site.pages}} ,并将它们的url与菜单项url相匹配 . 这些感觉就像在很多层面上糟糕的编程一样,并且在多次循环所有内容时我的性能受到了极大的打击 . 文件的生成速度提高了四倍,从现在的5秒增加到20秒,当菜单变得更大时,文件的生成会变得更糟 .

因此,我很乐意听到如何动态循环收集,或者听到其他选项来创建这样的菜单 . 由于我手头有相对网址,例如 /book/vol1 ,最佳方法是找到一种方法来获取对该文件夹中所有文章的引用(不包括子文件夹中的文章,但这不是必须的) .

1 回答

  • 2

    在液体标签内使用液体变量的语法与 {% for p in site.{{collection}} %} 略有不同 . 您可以尝试:

    {% assign collection = 'book' %}
    {% for p in site.[collection] %}
    

    或者您只是使用:

    {% assign books = site.book %}
    {% for p in books %}
    

相关问题