Хорошо, я хотел сделать эту статью немного больше, но столкнулся с препятствием при попытке использовать фильтры в Eleventy.

Поэтому я решил посвятить эту статью демонстрации того, как фильтры могут работать в Eleventy.

Фильтр — это, по сути, функция, которую мы можем расширить в нашем интерфейсе, вызвав разделитель канала |, за которым следует функция.

{
 {
 someVar | uppercase;
 }
}

Затем uppercase считается нашим фильтром.

Одиннадцать типов фильтров

На самом деле Eleventy знает довольно много типов фильтров, как указано в их документации по фильтрам.

module.exports = function(eleventyConfig) {
 // Liquid Filter
 eleventyConfig.addLiquidFilter(“uppercase”, function(value) { … });
 // Nunjucks Filter
 eleventyConfig.addNunjucksFilter(“uppercase”, function(value) { … });
 // Handlebars Filter
 eleventyConfig.addHandlebarsHelper(“uppercase”, function(value) { … });
 // JavaScript Template Function
 eleventyConfig.addJavaScriptFunction(“uppercase”, function(value) { … });
 // or, use a Universal filter (an alias for all of the above)
 eleventyConfig.addFilter(“uppercase”, function(value) { … });
};

Мы собираемся использовать метод универсального фильтра.

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

Добавление аргументов в фильтр

До сих пор мы говорили о фильтре uppercase, но на самом деле мы хотим сделать фильтр filteredPosts.

Что он должен делать:

Отфильтруйте сообщения и вырежьте первые {x} из результатов.

Вы можете задаться вопросом, почему?

Поскольку мой макет использует три отдельных макета, было бы разумнее разделить их.

{% set firstItem = pagination.items[0] %}
{% set secondItem = pagination.items[1] %}
{% set postListItems = pagination.items | filteredPosts(2) %}

Здесь вы можете увидеть, как я устанавливаю свои переменные.

Возможно, вы уже заметили фильтр! И, что более важно, как аргумент передается ему.

filteredPosts(argument)

Построение отфильтрованного постфильтра

Чтобы построить этот фильтр, нам нужно изменить наш файл .eleventy.js.

config.addFilter(‘filteredPosts’, function(value, argument) {
 return modifiedValue;
});

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

Мы хотим удалить первые 2 элемента, для чего мы можем использовать метод slice.

У меня были некоторые проблемы при использовании slice vs splice, но быстрое обновление информации о них заставило меня понять, что мы можем использовать splice для изменения входящего значения, удаления первых двух элементов и возврата его.

config.addFilter(‘filteredPosts’, function(value, limit) {
 value.splice(0, limit);
 return value;
});

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

Добавление нескольких аргументов

Конечно, мы также можем отправить несколько аргументов нашему фильтру Eleventy.

{% set postListItems = collections.posts | filteredPosts(0, 2) %}

И получить их как таковые:

config.addFilter(‘filteredPosts’, function(value, from, limit) {
 value.splice(from, limit);
 return value;
});

Мы могли бы даже установить значения по умолчанию:

config.addFilter(‘filteredPosts’, function(value, from = 0, limit = 2) {
 value.splice(from, limit);
 return value;
});

Ну вот, я надеюсь, что это поможет кому-то создавать свои собственные крутые фильтры с Eleventy 🤩.

Спасибо за чтение, и давайте подключаться!

Спасибо за чтение моего блога. Не стесняйтесь подписываться на мою рассылку по электронной почте и подключаться к Facebook или Twitter.

Первоначально опубликовано на https://daily-dev-tips.com 23 января 2021 г.