【问题标题】:Is it possible to sort a Jekyll array based on two variables?是否可以根据两个变量对 Jekyll 数组进行排序?
【发布时间】:2020-09-07 15:54:19
【问题描述】:

在我网站的首页,我展示了最新的几篇文章:

{% for post in posts limit: 6 %}
  ...
{% endfor %}

这很好用。

最近我一直在回去编辑一些旧帖子,我希望它们显示在首页的这个列表中。

我不想更改他们的日期。相反,我一直在为每个帖子添加一个新的lastUpdated 变量,并在我编辑它时添加它的日期。

layout: example
lastUpdated: 2020-09-07
---

所以现在我想修改我首页上的代码,如果帖子有它,它按lastUpdated排序,否则它应该按date排序。

我试过这个:

{% assign posts = site.posts
    | reverse
    | sort: "lastUpdated"
    | reverse %}
{% for post in posts limit: 6 %}
  ...
{% endfor %}

我认为这行得通,但事实证明它将所有已编辑的帖子(包含lastEdited 变量的帖子)排序到最前面,然后是新创建的帖子。我希望根据“修改”日期,编辑过的帖子和新创建的帖子都显示在此列表中。

我试过这个:

{% assign posts = site.posts
    | sort: "lastUpdated or date" %}
{% for post in posts limit: 6 %}
  ...
{% endfor %}

但这给了我默认顺序的帖子,大概是因为"lastUpdated or date" 不是一个有效的属性。

我也试过这个:

{% assign posts = site.posts
    | sort: "lastUpdated" or "date" %}
{% for post in posts limit: 6 %}
  ...
{% endfor %}

但毫不奇怪,这是一个语法错误。

有没有我想念的简单方法?

【问题讨论】:

    标签: jekyll github-pages liquid


    【解决方案1】:

    写完这篇文章后,我nerd-sniped 自己拼凑了一个创建两个数组的解决方案,然后根据lastUpdateddate 变量将它们合并在一起。

    {% assign createdPosts = site.posts %}
    {% assign updatedPosts = site.posts | sort: "lastUpdated" | reverse %}
    
    {% assign createdIndex = 0 %}
    {% assign updatedIndex = 0 %}
    
    {% for i in (1..10) %}
      {% assign createdDate = createdPosts[createdIndex].date | date: "%Y-%m-%d" %}
      {% assign updatedDate = updatedPosts[updatedIndex].lastUpdated | date: "%Y-%m-%d" %}
    
      {% if createdDate > updatedDate or updatedDate == nil %}
        // HTML for createdPosts[createdIndex]
        {% assign createdIndex = createdIndex | plus:1 %}
      {% else %}
        // HTML for updatedPosts[updatedIndex]
        {% assign updatedIndex = updatedIndex | plus:1 %}
      {% endif %}
    
    {% endfor %}
    

    需要注意的是,我无法直接比较datelastUpdated,因为我得到了这个错误:comparison of Date with Time failed,所以我不得不将它们都转换为字符串。

    这感觉很复杂,所以我可能最终会返回并用lastUpdated 填充每个帖子以保持简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-10
      • 1970-01-01
      • 2020-11-30
      相关资源
      最近更新 更多