如何调整Jekyll的下单?

时间:2014-10-04 19:49:43

标签: blogs jekyll

我已经开始了一个主题为jekyll-now的基于Jekyll的博客。我是Jekyll的新手以及它的运作方式(特别是Liquid)。我知道新帖需要如下:2014-10-04-Hello-World.md。但我真的不明白我如何订购这些。

我的第一个想法是他们按日期排序,因此同一天的两个帖子会随机排序。但事实并非如此吗?有没有办法按时间顺序订购帖子。或者至少有一个帖子档案页面?

4 个答案:

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

我想记录我在这篇文章中的努力,以便它可以帮助其他用户。您需要做两处更改:

  1. 打开帖子并增加重量。例如,重量:100
  2. 打开您想要排序帖子的菜单的html文件。对于Java / J2EE菜单,我在项目的根路径上有java.html文件。
  3. 然后,添加{% 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之后。