我已经开始了一个主题为jekyll-now的基于Jekyll的博客。我是Jekyll的新手以及它的运作方式(特别是Liquid)。我知道新帖需要如下:2014-10-04-Hello-World.md。但我真的不明白我如何订购这些。
我的第一个想法是他们按日期排序,因此同一天的两个帖子会随机排序。但事实并非如此吗?有没有办法按时间顺序订购帖子。或者至少有一个帖子档案页面?
答案 0 :(得分:31)
官方Jekyll文档中有一个示例如何创建基本的帖子存档页面:
Displaying an index of posts
奖励:对于更漂亮的存档页面(按年份或年/月分组),请参阅this answer。
你是对的,我无法在文档中找到任何说明帖子如何排序的内容,但实际上Jekyll 按时间顺序排序,最近首先发帖(如果您尝试我上面链接的示例,您可以看到这一点。)
要按照另一种方式对其进行排序(最早的帖子),您可以根据Liquid documentation使用reversed
关键字:
{% for post in site.posts reversed %}
但是,我不知道如何订购同一天的两个帖子,因为我没有写那么多帖子,所以我从来没有遇到过这个问题:-)
你必须亲自尝试。
答案 1 :(得分:25)
刚遇到同样的问题并解决了这个问题: https://groups.google.com/forum/#!topic/jekyll-rb/8QCIzevauSU
将日期字段添加到帖子的YAML Front Matter中,如下所示:
date: 2010-09-15 14:40:45
e.g。如果您在2014/12/31有2个帖子,则可以将date: 2014-12-31 00:30:00
添加到latest_post.md,将date: 2014-12-31 00:10:00
添加到old_post.md。
您可以根据需要添加时区(例如date: 2014-12-31 00:10:00 +08:00
)
答案 2 :(得分:7)
我想记录我在这篇文章中的努力,以便它可以帮助其他用户。您需要做两处更改:
然后,添加{% assign pages_list = pages_list | sort:"weight" %}
行,如下面的代码所示。这将按重量排序。
{% for category in site.categories %}
{% if category[0] contains 'java' %}
<h3 id="{{ category[0] }}-ref">{{ category[0] | join: "/" }}</h3>
<ul>
{% assign pages_list = category[1] %}
{% assign pages_list = pages_list | sort:"weight" %}
{% include JB/pages_list %}
</ul>
{% endif %}
{% endfor %}
答案 3 :(得分:0)
Jekyll在排序时仅字符串比较发布路径,这就是日期格式为年-月-日的原因。帖子在内部也是集合,您可以在reader.rb中看到正在调用的排序:
# Sorts posts, pages, and static files.
def sort_files!
site.collections.each_value { |c| c.docs.sort! }
site.pages.sort_by!(&:name)
site.static_files.sort_by!(&:relative_path)
end
因此,它使用通用的ruby方法对document.rb中的比较器进行排序和实现:
# Compare this document against another document.
# Comparison is a comparison between the 2 paths of the documents.
#
# Returns -1, 0, +1 or nil depending on whether this doc's path is less than,
# equal or greater than the other doc's path. See String#<=> for more details.
def <=>(other)
return nil unless other.respond_to?(:data)
cmp = data["date"] <=> other.data["date"]
cmp = path <=> other.path if cmp.nil? || cmp.zero?
cmp
end
这意味着它首先比较日期,并且仅在需要时检查文本。
仅当以某种方式找不到日期(没有元数据)时,该日期才是特殊的。对于草稿,它取决于文件修改时间,其余时间则取决于站点时间。
因此,如果您要强制同一天的帖子排序不同,请将文件名中标题的开头设计为按字母顺序首先排序。例如。如果您按降序列出帖子,则2020-01-01-a.md
会排在2020-01-01-b.md
之后。