Jeykll: Sorting files in _data subfolders by common property
我想遍历
这些文件的结构如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | // project/_data/sections/food.yml title: Food order: 2 content:"Food ipsum dolor sit amet." ----- // project/_data/sections/drink.yml title: Drink order: 1 content:"Drink ipsum dolor sit amet." |
遵循Jekyll文档中数据文件的结构,for循环代码如下:
1 2 3 4 5 6 7 8 9 10 | // project/index.html // ... {% for section_hash in site.data.sections | sort: 'order' %} {% assign section = section_hash[1] %} <p> {{ section.title }} - {{ section.content }} </p> {% endfor %} // ... |
我还尝试过对部分进行排序,然后再将其传递给for循环,如下所示:
1 2 3 4 5 6 | {% assign sections_sorted = sita.data.sections | sort: 'order' %} {% for section in sections_sorted %} <p> {{ section.title }} - {{ section.content }} </p> {% endfor %} |
最后,我尝试将
1 2 3 4 5 6 7 | // project/_data/sections/drink.yml --- order: 1 --- title: Drink content:"Drink ipsum dolor sit amet." |
只是面临同样的问题。
1 | { file_name => file_content, ... } |
不幸的是,液体阵列过滤器不支持哈希。要将其转换为数组,可以使用以下过滤器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | module Jekyll module ValuesFilter def values(input) case when input.instance_of?(Hash) input.values else input end end end end Liquid::Template.register_filter(Jekyll::ValuesFilter) |
将其放入
1 2 3 4 | {% assign ordered_items =(site.data.folder_name | sort | order: 'field') %} {% for item in ordered_items %} {{ item.<property_name> }} {% endfor %} |
如果
即使过时了,我也遇到了同样的问题。
我的解决方案是提供_index.xml来定义顺序,例如项目。
我们在这个文件夹中:_data / projects
有很多文件,例如
- _index.yml
- project_1.yml
- project_2.yml
- project_3.yml
_index.yml的内容如下所示:
1 2 3 | - project_2 - project_1 - project_3 |
显示项目的调用如下所示:
1 2 3 4 | {% for project_id in site.data.projects["_index"] %} {% assign project = site.data.projects[project_id] %} // do something with the project {% endfor %} |
我希望这有帮助
您的第二个示例应该可以,但是有一个错字:
1 2 3 4 5 6 | {% assign sections_sorted = site.data.sections | sort: 'order' %} {% for section in sections_sorted %} <p> {{ section.title }} - {{ section.content }} </p> {% endfor %} |
我不确定我的问题是否与您有关。我正在尝试对
关于第一个示例:
我认为这没有用,我相信这不是在Liquid中实现的。看到这个问题:https://github.com/Shopify/liquid/pull/304
但是我不明白为什么您的第二个示例不起作用,也许我在这里误解了一些东西:
显然,这应该从Jekyll 2.2.0起开始起作用,请参见此线程:带有Jekyll和Liquid的排序导航菜单