gpt4 book ai didi

sorting - 杰基尔 : Sorting files in _data subfolders by common property

转载 作者:行者123 更新时间:2023-12-02 18:41:45 26 4
gpt4 key购买 nike

我想迭代 _data/sections/ 中的每个文件,但输出按所述文件中包含的数据(顺序属性)排序。当前输出的顺序恰好正确,但我不确定为什么,并且在修改排序属性时顺序不会改变。

文件结构如下:

// 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 docs for data files 上找到的结构,for循环代码如下:

// project/index.html

// ...
{% for section_hash in site.data.sections | sort: 'order' %}
{% assign section = section_hash[1] %}
<p><strong>{{ section.title }}</strong> - {{ section.content }}</p>
{% endfor %}
// ...

我还尝试在将这些部分传递到 for 循环之前对它们进行排序 as seen here :

{% assign sections_sorted = sita.data.sections | sort: 'order' %}
{% for section in sections_sorted %}
<p><strong>{{ section.title }}</strong> - {{ section.content }}</p>
{% endfor %}

最后,我尝试将 order 属性移动到 _data/sections/ 中每个节文件的前面,但这导致了异常: 液体异常:没有将字符串隐式转换为整数

// project/_data/sections/drink.yml
---
order: 1
---

title: Drink
content: "Drink ipsum dolor sit amet."

对于 _data/ 子目录中的文件可以吗?如何按 order 对这些文件的输出进行数字排序,按 title 按字母顺序反向排序,等等?

最佳答案

刚刚遇到了同样的问题。 site.data.whatever对于文件夹来说始终是哈希

{ file_name => file_content, ... }

不幸的是,Liquid 数组过滤器不支持哈希。要将其转换为数组,可以使用以下过滤器:

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)

将其放入 _plugins 文件夹并使用下一个 Liquid 代码:

{% assign ordered_items =(site.data.folder_name | sort | order: 'field') %}
{% for item in ordered_items %}
{{ item.<property_name> }}
{% endfor %}

如果 folder_name 指向 CSV 文件或 JSON 文件内的数组,此代码也适用。

关于sorting - 杰基尔 : Sorting files in _data subfolders by common property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28058524/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com