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

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

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

【问题讨论】:

    标签: jekyll liquid blogs


    【解决方案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】:

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

    1. 打开您的帖子并增加重量。例如,重量:100
    2. 打开您想要排序帖子的菜单的 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 之后。

      【讨论】:

        猜你喜欢
        • 2020-06-06
        • 2018-04-10
        • 1970-01-01
        • 2021-08-03
        • 1970-01-01
        • 1970-01-01
        • 2021-08-22
        • 2017-06-17
        • 1970-01-01
        相关资源
        最近更新 更多