Для преобразования выходных данных в более подходящий формат можно использовать фильтры. Фильтры - это обычные функции. Фильтр добавляется к используемой переменной в качестве атрибута, отделяясь символом
Например, {{ product.price }}
- переменная, хранящая данные о цене товара. Для того, чтобы значение цены товара выводилось с указанием символа используемой валюты, можно добавить фильтр | money
.
{{ product.price }}
Выведется "100"
{{ product.price | money }}
Выведется "100 руб."
Исходные данные в значении переменной при этом сохраняют своё прежнее значение.
Также можно применять несколько фильтров по очереди:
{{ product.price | money }}
Выведется "100 руб."
{{ product.price | times: 2 | money }}
Выведется "200 руб."
Если у фильтра больше одного аргумента, то остальные аргументы перечисляются справа от имени фильтра после символа ":" (двоеточие) через запятую:
{{ "The cat came back the very next day" | truncatewords: 4 }}
Выведется "The cat came back..."
{{ "The cat came back the very next day" | truncatewords: 4, "--" }}
Выведется "The cat came back--"
size
{% assign string = 'wooden, deepsnow, season2006' %} {% assign array = string | split: ', ' | reverse %} {{ array | size }}
Выведет "3"
first
{% assign string = 'wooden, deepsnow, season2006' %} {% assign array = string | split: ', '%} {{ array | first }}
Выведет "wooden"
last
{% assign string = 'wooden, deepsnow, season2006' %} {% assign array = string | split: ', '%} {{ array | last }}
Выведет "season2006"
split
{% assign string = 'wooden, deepsnow, season2006' %} {% assign array = string | split: ', '%} {{array[0]}}
Выведет "wooden"
join
{% assign my_string = 'wooden, deepsnow, season2006' %} {% assign my_array = my_string | split: ', '%} {{ my_array | join: ', ' }}
Выведет "wooden, deepsnow, season2006"
reverse
{% assign string = 'wooden, deepsnow, season2006' %} {% assign array = string | split: ', ' | reverse %} {{ array | first }} season2006
Выведет "season2006"
{{ array | last }}
Выведет "wooden"
sort
// products = "a", "b", "A", "B" {% assign products = collection.products | sort: 'title' %} {% for product in products %} {{ product.title }} {% endfor %}
Выведет "A B a b"
map
{% assign collection_titles = collections | map: 'title' %} {% for collection_title in collection_titles %} {{ collection_title }}, {% endfor %}
Выведет "каталог1,каталог2,каталог3,"
where
{{ collections.all.products | where: "available", false | size }}
concat
{% assign fruits = "apples, oranges, peaches, tomatoes" | split: ", " %} {% assign vegetables = "broccoli, carrots, lettuce, tomatoes" | split: ", " %} {% assign plants = fruits | concat: vegetables %}
Выведет "apples","oranges","peaches","tomatoes","tomatoes","broccoli","carrots","lettuce","tomatoes"
uniq
{% assign fruits = "apples, oranges, peaches, tomatoes, tomatoes" | split: ", " | uniq | json %}
Выведет "apples, oranges, peaches, tomatoes"
plus
{% assign number = 2 %} {{ number | plus: 2 }}
Выведет "4"
minus
{% assign number = 2 %} {{ number | minus: 2 }}
Выведет "0"
times
{{ 10 | times: 2 }}
Выведет "20"
divided_by
{{ 10 | divided_by: 2 }}
Выведет "5"
round
{{ 4.6 | round: 0 }}
Выведет "5"
{{ 4.3 | round: 0 }}
Выведет "4"
{{ 4.5612 | round: 2 }}
Выведет "4.56"
modulo
{{ 12 | modulo: 5 }}
Выведет "2"
to_integer
{{ '10' | to_integer }}
Выведет "10"
{{ nil | to_integer }}
Выведет "0"
{% assign test = '10' | to_integer %} {% if test > 9 %} test > 9 {% endif %}
Выведет "test > 9"
money
{{ product.price | money }}
Выведет "1 000 руб."
{{ 1000 | money }}
Выведет "1 000 руб."
append
{{ 'sales' | append: '.jpg' }}
Выведет "sales.jpg"
prepend
{{ 'sale' | prepend: 'Made a great ' }}
Выведет "Made a great sale"
capitalize
{{ 'capitalize me' | capitalize }}
Выведет "Capitalize me"
replace
// product.title = "Awesome Shoes" {{ product.title | replace: 'Awesome', 'Mega' }}
Выведет "Mega Shoes"
upcase
{{ 'i want this to be uppercase' | upcase }}
Выведет "I WANT THIS TO BE UPPERCASE"
downcase
{{ 'UPPERCASE' | downcase }}
Выведет "uppercase"
escape
{{ "<p>test</p> <div class='block'></div>" | escape }}
#=> <p>test</p> <div class='block'></div>
Выведет "<p>test</p> <div class='block'></div>"
newline_to_br
{% capture var %} One Two Three {% endcapture %} {{ var | newline_to_br }}
Выведет "One <br>
Two <br>
Three <br>"
strip_html
{{ '
Текст в теге
новая строка
' | strip_html | truncate: 20 }}
Выведет "Текст в теге нов..."
md5
{{ 'test md5' | md5 }}
Выведет "0e4e3b2681e8931c067a23c583c878d5"
remove
{{ "Hello, world. Goodbye, world." | remove: "world" }}
Выведет "Hello, . Goodbye, ."
remove_first
{{ "Hello, world. Goodbye, world." | remove_first: "world" }}
Выведет "Hello, . Goodbye, world."
lstrip
{{ " So much room for activities! " | lstrip }}
Выведет "So much room for activities!"
truncate
{{ "The cat came back the very next day" | truncate: 13 }}
The cat ca...
{{ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" | truncate: 18, ", and so on" }}
ABCDEFG, and so on
truncatewords
{{ "The cat came back the very next day" | truncatewords: 4 }}
Выведет "The cat came back..."
{{ "The cat came back the very next day" | truncatewords: 4, "--" }}
Выведет "The cat came back--"
strip_newlines
url_encode
{{ "john@liquidhub.ru" | url_encode }}
Выведет "john%40liquidhub.ru"
url_decode
{{ 'john%40liquidhub.ru' | url_decode }}
Выведет "john@liquidhub.ru"
asset_url
{{ 'shop.css' | asset_url }}
Выведет "//assets3.insales.ru/assets/1/7120/23504/v_1479117076/build/shop.css"
asset_url_if_exists
{% assign path = "image.png" | asset_url_if_exists %}
{% if path %}
<img src="{{ path }}" />
{% else %}
Картинка отсутствует
{% endif %}
file_url
{{ 'image.png' | file_url }}
add_param
{{ '/product?lang=ru' | add_param: 'variant_id', 123456 }}
Выведет "/product?lang=ru&variant_id=123456"
locale_url
{{'/page/about' | locale_url}}
Выведет "/page/about?lang=en"
default
{{ product_price | default: 2.99 }}
Выведет "2.99"
{% assign product_price = "" %} {{ product_price | default: 2.99 }}
Выведет "2.99"
date
{{ 'now' | date: "%Y" }}
%a - Сокращённое обозначение дня недели (``Sun'') %A - Полное обозначение дня недели (``Sunday'') %b - Сокращённое обозначение названия месяца (``Jan'') %B - Полное обозначение названия месяца (``January'') %c - Предпочтительное местное представление даты и времени %d - День месяца (01..31) %H - Час суток, 24-часовое представление (00..23) %I - Час суток, 12-часовое представление (01..12) %j - Номер дня года (001..366) %m - Номер месяца года (01..12) %M - Номер минуты часа (00..59) %p - Указатель времени суток (``AM'' or ``PM'') ''после полудня'' или ''до полудня'' соответственно %S - Секунда минуты (00..60) %U - Неделя текущего года, начиная с первого воскресенья года как первого дня первой недели (00..53) %W - Неделя текущего года, начиная с первого понедельника года как первого дня первой недели (00..53) %w - Номер дня недели (Воскресенью соответствует 0, 0..6) %x - Предпочтительное представление только даты, без указания времени %X - Предпочтительное представление только времени, без указания даты %y - Номер года двузначный (00..99) %Y - Номер года четырёхзначный %Z - Имя временной зоны %% - Обозначает символ ``%''
json
<script type="text/javascript">
var myObject = {
text: {{ '<p>Строка в html теге</p>' | json }},
product: {{ product | json }}
}
console.log(myObject);
</script>
custom_json
<script type="text/javascript">
var customArticle = {{ article | custom_json: 'title', 'id', 'author' }};
</script>
dark?
{{ '#000000' | dark? }}
Выведет "true"
{{ '#ffffff' | dark? }}
Выведет "false"
change_lightness
{{ '#0036b3' | change_lightness: -20 }}
Выведет "#002270"
{{ '#0036b3' | change_lightness: 0 }}
Выведет "#0036b3"
{{ '#0036b3' | change_lightness: 20 }}
Выведет "#0049f5"
image_url
<img src="{{ product.first_image | image_url: 800, resizing_type: 'fit_width' }}"> <img src="{{ article.image | image_url: 320, format: 'jpg' }}"> <img src="{{ collection.image | image_url: 600, format: 'webp' }}">
Фильтр на вход принимает параметр в виде числа. Например если указать 200, то изображение уменьшится с сохранением пропорций до 200px по длинной стороне. 200x400 = > 100x200. Минимальный размер 16px. Максимальный размер 2048px. У фильтра есть второй не обязательный параметр - format. Этот параметр принимает 2 значения - 'jpg' или 'webp'. Параметр format преобразовывает png => jpg или любой формат в webp, что позволяет оптимизировать изображение. ! Если исходное изображение по размеру меньше указанного в фильтре, изображение будет растянуто до указанно значения. ! Не применяется к ассетам темы (содержимое папки media). Параметр resizing_type дает возможность заставить картинку изменять размер по ширине. Для этого необходимо выставить значение fit_width
webp_picture_tag
{% assign image_title = product.title | escape %} {{ product.first_image | webp_picture_tag: 600, class: 'product-image', data-index: 1, alt: image_title, title: image_title }}
Выведет:
<picture>
<source srcset="https://static-eu.insales.ru/.../600/600/.../product.png@webp" type="image/webp">
<img src="https://static-eu.insales.ru/.../600/600..product.png" class="product-image" data-index="1" alt="товар" title="товар">
</picture>
{{ collection.image | webp_picture_tag: 600 }}
Выведет:
<picture>
<source srcset="https://static-eu.insales.ru/.../600/600/.../image_original.jpg@webp" type="image/webp">
<img src="https://static-eu.insales.ru/r/.../600/600/.../image_original.jpg">
</picture>
Фильтр принимает обязательное значение (размер изображения) в формате числа. Через запятую можно указать атрибуты для тега img. Если у изображения товара заполнено имя, оно проставиться в атрибут title автоматически. ! Не применяется к ассетам темы (содержимое папки media).