Collections 按名称获取杰基尔收藏项目的优雅方式?

Collections 按名称获取杰基尔收藏项目的优雅方式?,collections,jekyll,Collections,Jekyll,在Jekyll2.5.3中,我使用相册(因为我不仅需要存储数据,还需要生成页面) 使用Jekyll时,您可以获得特定项目的数据,其简单方式如下:site.data.albums[foo] 但在收藏方面,情况要糟糕得多。我尝试过的所有方法都是无所作为: site.albums[foo] site.collections.albums[foo] site.collections.albums.docs[foo] site.collections.albums.files[foo] 因此,我需要:

在Jekyll2.5.3中,我使用相册(因为我不仅需要存储数据,还需要生成页面)

使用Jekyll时,您可以获得特定项目的数据,其简单方式如下:
site.data.albums[foo]

但在收藏方面,情况要糟糕得多。我尝试过的所有方法都是无所作为:

  • site.albums[foo]
  • site.collections.albums[foo]
  • site.collections.albums.docs[foo]
  • site.collections.albums.files[foo]
因此,我需要:

  • 循环浏览所有集合项
  • 对他们每个人来说
  • 将此名称与某个目标名称进行比较
  • 如果名称匹配,最后将集合项数据分配给要使用的某个变量

  • 有更好的建议吗?

    我今天刚做了这件事,你的主张是正确的。我是这样做的:

    <!-- 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 %}
    
    它甚至可以用于填充其他部分中的值,如:

    {% include card.html title=workItem.title bg=workItem.card.bg href=workItem.url %}
    
    ,您可以使用过滤器
    where_exp
    按集合的任何属性过滤集合。因此,如果我在
    相册
    集合中有以下项目:

    ---
    title: My Amazing Album
    ---
    ...
    
    我可以通过该名称获取项目的第一个匹配项:

    {% assign album = site.albums 
        | where_exp:"album", "album.title == 'My Amazing Album'" 
        | first %}
    
    请注意,我使用
    first
    过滤器,因为
    where\u exp
    返回匹配项的数组

    然后以我喜欢的任何方式使用它:

    <h1>{{ album.title }}</h1>
    
    {{album.title}
    

    我不能保证这种方法的构建性能,但我必须想象它比液体循环更好。

    这将消耗构建时间。可惜没有更好的办法了。
    <h1>{{ album.title }}</h1>