Вопрос:

Jekyll Группировка и сортировка коллекции по категориям и приоритетам

jekyll liquid

653 просмотра

1 ответ

18116 Репутация автора

У меня есть куча страниц документации в коллекции, у каждой из которых есть категория, к которой я использую 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: Как сортировать группы по приоритетам?

Автор: Cheesebaron Источник Размещён: 26.03.2017 08:31

Ответы (1)


5 плюса

40059 Репутация автора

Решение

Вы можете использовать массив конфигурации для хранения порядка категорий:

# _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 %}

Это подразумевает, что вы ссылаетесь на все свои категории в вашей конфигурации, иначе они не будут отображаться в этом списке.

Автор: David Jacquel Размещён: 26.03.2017 09:29
Вопросы из категории :
32x32