Кастомная сортировка в 11ty

Дата публикации: 17 декабря  2021 года

Как решается задача с сортировкой записи по дате, указанной в кастомном поле.

Задача: отсортировать записи по дате в кастомном поле записи.

В записи о путешествии я имею два поля: стандартное date — дату публикации записи и start — дату начала путешествия.

date: 2021-10-30
start: 2011-03-07

Дефолтная сортировка в шаблонах 11ty опирается на поле date.

{%- for travel in collections.travels | reverse -%}

Пока я наполнял список путешествий в хронологическом порядке проблем не было — очерёдность дат путешествий совпадала с последовательностью публикаций. Но стоило мне найти пару забытых поездок и вставить их в список после, как порядок оказался нарушен.

Делать костыль в виде искажения даты публикации я не хотел, поэтому разобрался как сделать кастомный сорт.

Для этого в конфиге 11ty добавил следующий блок:

module.exports = (config) => {

  // прочие фрагменты конфига
  
  config.addCollection("travelsDateStart", function(collectionApi) {
    return collectionApi.getFilteredByTags("travels").sort(function(a, b) {
      return b.data.start - a.data.start;
    });
  });

  // прочие фрагменты конфига
}

После этого в шаблоне со списком путешествий смог использовать новую сортировку:

{%- for travel in collections.travelsDateStart -%}