6

在我的一些页面(不是全部)的前面,我有:

---
top-navigation:
    order: 2
---

使用液体我想过滤所有具有top-navigation对象的网站页面并按top-navigation.order.

我正在尝试sort:'top-navigation.order',但这会引发undefined method [] for nil:NilClass. 我试过where:"top-navigation", true了,但这并不等同于真实的价值观。

如何过滤具有top-navigation然后排序的页面?

4

2 回答 2

6

两步:

  1. top-navigation使用包含该键的页面创建一个数组。

    我们创建一个空数组,然后推送具有密钥的项目。

    {% assign navposts = ''|split:''%}
    {% for post in site.posts %}
    {% if post.top-navigation %}
    {% assign navposts = navposts|push:post%}
    {% endif %}
    {% endfor %}
    
  2. 对上面的数组进行排序top-navigation.order

    {% assign navposts = navposts|sort: "top-navigation.order"%}
    

打印结果:

{% for post in navposts %}
<br>{{ post.title }} - {{post.top-navigation}}
{% endfor %}

对于页面使用site.pages.

于 2017-08-09T12:20:33.503 回答
3

在 Jekyll 3.2.0+(和 Github Pages)中,您可以像这样使用 where_exp 过滤器:

{% assign posts_with_nav = site.posts | where_exp: "post", "post.top-navigation" %}

在这里,对于 site.posts 中的每个项目,我们将其绑定到“post”变量,然后评估表达式“post.top-navigation”。如果它评估为真,那么它将被选中。

然后,将其与排序放在一起,您将拥有以下内容:

{%
  assign sorted_posts_with_nav = site.posts 
  | where_exp: "post", "post.top-navigation" 
  | sort: "top-navigation.order"
%}

Liquid 也有where过滤器,当你不给它一个目标值时,它会选择所有具有该属性真实值的元素:

{% assign posts_with_nav = site.posts | where: "top-navigation" %}

不幸的是,这个变体不适用于 Jekyll。

于 2021-01-01T16:12:25.003 回答