如何调整 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 标记