如何调整 Jekyll 发布顺序?

Posted

技术标签:

【中文标题】如何调整 Jekyll 发布顺序?【英文标题】:How to adjust Jekyll post order? 【发布时间】:2014-11-29 13:14:19 【问题描述】:

我创建了一个基于 Jekyll 的博客,主题为 jekyll-now。我是 Jekyll 及其运作方式的新手(尤其是 Liquid)。我知道新帖子需要如下:2014-10-04-Hello-World.md。但我真的不明白我怎么能订购这些。

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

【问题讨论】:

【参考方案1】:

在 Jekyll 官方文档中有一个示例如何创建一个基本的帖子存档页面:Displaying an index of posts

奖励:对于更漂亮的存档页面(按年或年/月分组),请参阅this answer。


你是对的,我在文档中找不到任何说明帖子如何排序的内容,但事实上 Jekyll 确实按时间顺序排列它们,最近的帖子在前(你如果您尝试我上面链接的示例,可以看到这一点)。

要以其他方式对它们进行排序(最旧的帖子优先),您可以使用reversed 关键字,根据Liquid documentation:

% for post in site.posts reversed %

但是,我不知道同一日期的两个帖子是如何排序的,因为我不写那么多帖子,所以我从来没有遇到过这个问题:-) 你必须自己尝试一下。

【讨论】:

感谢这确实解决了问题。很遗憾我不能按时间订购,因为同一天的两个帖子似乎可以随心所欲地订购!我正在寻找创建一个存档,所以这真的很有帮助。 如果您懒得阅读答案,您可以按时间排序。 ;) 最近的帖子优先?这不是的时间顺序。这是时间倒序。 两个相同日期的帖子仍然有不同的时间戳,所以它们会正确排序。 Jekyll 过滤器可以让你做很多事情,比如按标题排序:jekyllrb.com/docs/liquid/filters【参考方案2】:

刚刚遇到同样的问题并用这个解决方案解决了: https://groups.google.com/forum/#!topic/jekyll-rb/8QCIzevauSU

在帖子的 YAML Front Matter 中添加日期字段,如下所示:

date: 2010-09-15 14:40:45

例如如果您在 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

【讨论】:

很高兴知道日期字段是可选的! (我一直在手动保持它与文件名同步...... duh :-(【参考方案3】:

我想在这篇文章中记录我的挣扎,以便对其他用户有所帮助。您需要做两处更改:

    打开您的帖子并增加重量。例如,重量:100 打开您想要排序帖子的菜单的 html 文件。对于 Java/J2EE 菜单,我在项目的根路径中有 java.html 文件。

然后,添加% 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 %

【讨论】:

【参考方案4】:

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 之后。

【讨论】:

以上是关于如何调整 Jekyll 发布顺序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Jekyll 页面中使用语法高亮 Jekyll 标记

带有 Jekyll 和 Liquid 的排序导航菜单

在 jekyll 博客中支持标签的简单方法

如何在云开发静态托管中使用Jekyll

Jekyll/Liquid 模板:如何按年份对博客文章进行分组?

Jekyll 日期格式如何工作?