按Liquid和Jekyll中的修改变量排序

时间:2016-03-28 13:53:17

标签: jekyll liquid

我在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) %}

这些都不会引发错误,但它们都不起作用。

1 个答案:

答案 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