简短版本:如何在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 回答
在液体标签内使用液体变量的语法与
{% for p in site.{{collection}} %}
略有不同 . 您可以尝试:或者您只是使用: