我在集合中有一堆文档页面,所有文档页面都有一个类别,我正在使用group_by过滤器,如下所示:

{% assign docs_by_category = site.documentation | group_by: "category" %}

然后,我使用这些分组来创建菜单结构,其中每个类别的项目都列在标题下。一切都很好。

但是,我的问题在于,能够排序,首先显示哪个类别,所以我希望能够以某种方式对它们进行优先排序。

说,如果我有以下类别: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 %}

这意味着您在配置中引用了所有类别,否则,它们将不会出现在此列表中。

关于jekyll - Jekyll按类别和优先级分组和排序集合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43034183/

10-11 15:15
查看更多