簡體   English   中英

根據Jekyll中數組中的第一個參數過濾內容

[英]Filtering content based on first parameter in array in Jekyll

在帖子的“前題”中,我有一個“類別”,它是一個數組。

我正在尋找一種基於Categories數組中的第一個元素過濾帖子的方法。

例如,如果我有兩個帖子的“前題”,例如:

title: Post Number One 
categories:
   - first post ever
   - cool stories

title: Post Two
categories:
- cool stories

我想要一種過濾類別的方法,其中“很酷的故事”將僅返回“后兩個”,因為“很酷的故事”顯示為數組的第一個元素。

有幾種方法可以實現此功能。 其中之一是:

使用以下代碼在名為first-category.html _includes創建一個新的包含文件:

{% assign chosen_category = include.category %}

{% for post in site.posts %}
{% for category in post.categories.first %}
{% if category == chosen_category %}
  {{ post.title }}
{% endif %}
{% endfor %}
{% endfor %}

然后,在您列出該帖子的頁面中,該頁面的第一個類別為相關類別,只需添加上述文件並傳遞所選的類別名稱即可:

## Post that have the first category of "cool stories"

{% include first-category.html category = "cool stories" %}

## End

上面的代碼將僅顯示具有“很酷的故事”作為帖子的第一類的帖子。

這是一個信息體系結構(IA)問題。

  • 任何帖子都必須歸入主要類別
  • 帖子可以分類為多個“ 類別

讓我們使用Jekyll的類別內部類別來表示我們的IA。

如果您定義這樣的帖子:

---
title:  "My post"
category: "main category"
categories:
  - other
  - wat!
# ... more front matter variables
---

類別將以:

post.category => main category
post.categories =>
  - other
  - wat!
  - main category

現在,如果要使用category來過濾帖子,請使用group_by和where_exp過濾器 ,可以執行以下操作:

{% assign category = "main category" %}

{% comment %} #### Grouping posts by 'main' category {% endcomment %}
{% assign grouped = site.posts | group_by: "category" %}
{{ grouped | inspect }}

{% comment %}#### Get our category group{% endcomment %}
{% assign categoryPosts = grouped | where_exp: "group", "group.name == category" | first %}
{{ categoryPosts | inspect }}

{% comment %} #### All interesting posts are now in categoryPosts.items {% endcomment %}
{{ categoryPosts.items | inspect }}

{% comment %} #### We can now sort and loop over our posts {% endcomment %}

{% assign sorted = categoryPosts.items | sort: "whateverKeyYouWantToSortOn" %}
<ul>
{% for post in sorted %}
 <li>
  <a href="{{ site.baseurl }}{{ post.url }}">{{ post.title }}</a>
  <br>Category : {{ post.category }}
  <br>Categories :
  <br><ul>{% for c in post.categories %}
   <li>'categorie' {{ forloop.index }} - {{ c }}</li>
  {% endfor %}</ul>
 </li>{% endfor %}
</ul>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM