我在Jekyll有一个我想要排序的集合。按标题排序当然很容易。
<ul>
{% for note in site.note | sort: "title" %}
<li>{{note.path | git_mod }}: {{ note. title }}</li>
{% endfor %}
</ul>
我想按日期排序。但由于集合没有日期,我有一个自定义的Liquid过滤器,它采用项目的路径,并在Git中获取其最后修改时间。您可以在上面的代码中看到我将路径传递给git_mod
的位置。我可以验证这是否有效,因为当我打印出列表时,我得到正确的最后修改时间,这是一个完整的日期。 (实际上,我也将其传递给date_as_string
。)
但我不能按该值排序,因为Liquid不知道它,因为它是site.note
集合中每个项目中已有的值。我该如何按该值排序?我在想这样的事情,但它不起作用:
<ul>
{% for note in site.note | sort: path | date_mod %}
<li>{{note.path | git_mod }}: {{ note. title }}</li>
{% endfor %}
</ul>
我也尝试了类似的变体:{% for note in site.note | sort: (note.path | git_mod) %}
这些都不会引发错误,但它们都不起作用。
答案 0 :(得分:1)
这是您可以使用Jekyll hooks。
的情况您可以创建_plugins / git_mod.rb
Jekyll::Hooks.register :documents, :pre_render do |document, payload|
# as posts are also a collection only search Note collection
isNote = document.collection.label == 'note'
# compute anything here
git_mod = ...
# inject your value in dacument's data
document.data['git_mod'] = git_mod
end
然后,您可以按git_mod
键
{% assign sortedNotes = site.note | sort: 'git_mod' %}
{% for note in sortedNotes %}
....
请注意,for循环中不能sort
。您首先需要sort
中的assign
,然后是loop
。