thy*_*bzi 5 collections jekyll
在Jekyll 2.5.3中,我使用 albums 集合(因为不仅需要存储数据,还需要生成的页面)。
当Jekyll 数据文件时,您可以像以下这样简单地获取特定项目的数据:site.data.albums[foo]
但是有了收藏,情况就更糟了。我尝试过的所有这些方法无济于事:
site.albums[foo]site.collections.albums[foo]site.collections.albums.docs[foo]site.collections.albums.files[foo]所以我需要:
还有更好的建议吗?
从 Jekyll 3.2 开始,您可以使用过滤器where_exp按集合的任何属性来过滤集合。因此,如果我的集合中有以下项目albums:
---
title: My Amazing Album
---
...
Run Code Online (Sandbox Code Playgroud)
我可以获取该名称的项目的第一个匹配项:
{% assign album = site.albums
| where_exp:"album", "album.title == 'My Amazing Album'"
| first %}
Run Code Online (Sandbox Code Playgroud)
请注意,我使用first过滤器是因为where_exp返回匹配项的数组。
然后以我喜欢的方式使用它:
<h1>{{ album.title }}</h1>
Run Code Online (Sandbox Code Playgroud)
我无法保证此方法的构建性能,但我必须想象它比 Liquid 循环更好。
我今天刚刚做了这件事,你的说法是正确的。我是这样做的:
<!-- this is in a partial with a 'name' parameter -->
{% for item in site.albums %}
{% assign name = item.path | split:"/" | last | split:"." | first %}
{% if name == include.name %}
{% assign collectionItem = item %}
{% endif %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
用法
{{ collectionItem.title }}
{{ collectionItem.url }}
{{ collectionItem.path }}
Run Code Online (Sandbox Code Playgroud)
它甚至可以用于填充其他部分中的值,如下所示:
{% include card.html title=workItem.title bg=workItem.card.bg href=workItem.url %}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
922 次 |
| 最近记录: |