Кастомная сортировка в 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 -%}