Jekyll 按类别和优先级分组和排序 Collection
Jekyll Grouping and Sorting Collection by Category and Priority
我在 collection 中有一堆文档页面,它们都有一个类别,我正在使用 group_by
过滤器,如下所示:
{% assign docs_by_category = site.documentation | group_by: "category" %}
然后我使用这些分组创建菜单结构,其中每个类别的项目都列在 header 下。这一切都很好。
但是,我的问题在于,能够排序,首先显示哪个类别,所以我希望能够以某种方式确定它们的优先级。
比如说,如果我有以下类别:tutorials, getting started, advanced
。我不希望 advanced
显示为第一类,而是 getting started
.
当前生成菜单的代码类似于:
{% assign navurl = page.url | remove: 'index.html' %}
{% assign docs_by_category = site.documentation | group_by: "category" | reverse %}
{% for category in docs_by_category %}
<div class="category_wrapper">
<div class="category">{{ category.name }}</div>
<ul>
{% for item in category.items %}
<li class="collapsed">
<a href="{{ site.baseurl }}{{ item.url }}">
{% if item.url == navurl %}
<u>{{ item.title }}</u>
{% else %}
{{ item.title }}
{% endif %}
</a>
</li>
{% endfor %}
</ul>
</div>
{% endfor %}
TL;DR:如何按某种优先级对组进行排序?
您可以使用配置数组来存储类别顺序:
# _config.yml
categories-order:
- getting started
- tutorials
- advanced
然后:
{% assign docs_by_category = site.documentation | group_by: "category" %}
{% for cat in site.categories-order %}
{% assign currentCat = docs_by_category | where: 'name', cat | first %}
<div class="category_wrapper">
<div class="category">{{ currentCat.name }}</div>
<ul>
{% for item in currentCat.items %}
<li class="collapsed">
<a href="{{ site.baseurl }}{{ item.url }}">
{% if item.url == navurl %}
<u>{{ item.title }}</u>
{% else %}
{{ item.title }}
{% endif %}
</a>
</li>
{% endfor %}
</ul>
</div>
{% endfor %}
这意味着您在配置中引用了所有类别,否则它们将不会出现在此列表中。
我在 collection 中有一堆文档页面,它们都有一个类别,我正在使用 group_by
过滤器,如下所示:
{% assign docs_by_category = site.documentation | group_by: "category" %}
然后我使用这些分组创建菜单结构,其中每个类别的项目都列在 header 下。这一切都很好。
但是,我的问题在于,能够排序,首先显示哪个类别,所以我希望能够以某种方式确定它们的优先级。
比如说,如果我有以下类别:tutorials, getting started, advanced
。我不希望 advanced
显示为第一类,而是 getting started
.
当前生成菜单的代码类似于:
{% assign navurl = page.url | remove: 'index.html' %}
{% assign docs_by_category = site.documentation | group_by: "category" | reverse %}
{% for category in docs_by_category %}
<div class="category_wrapper">
<div class="category">{{ category.name }}</div>
<ul>
{% for item in category.items %}
<li class="collapsed">
<a href="{{ site.baseurl }}{{ item.url }}">
{% if item.url == navurl %}
<u>{{ item.title }}</u>
{% else %}
{{ item.title }}
{% endif %}
</a>
</li>
{% endfor %}
</ul>
</div>
{% endfor %}
TL;DR:如何按某种优先级对组进行排序?
您可以使用配置数组来存储类别顺序:
# _config.yml
categories-order:
- getting started
- tutorials
- advanced
然后:
{% assign docs_by_category = site.documentation | group_by: "category" %}
{% for cat in site.categories-order %}
{% assign currentCat = docs_by_category | where: 'name', cat | first %}
<div class="category_wrapper">
<div class="category">{{ currentCat.name }}</div>
<ul>
{% for item in currentCat.items %}
<li class="collapsed">
<a href="{{ site.baseurl }}{{ item.url }}">
{% if item.url == navurl %}
<u>{{ item.title }}</u>
{% else %}
{{ item.title }}
{% endif %}
</a>
</li>
{% endfor %}
</ul>
</div>
{% endfor %}
这意味着您在配置中引用了所有类别,否则它们将不会出现在此列表中。