Поделиться через


Доступные фильтры Liquid

Фильтры Liquid используются для изменения вывода строк, чисел, переменных и объектов. Они отделяются от значений, к которым применяются, с помощью символа |.

{{ 'hal 9000' | upcase }} <!-- Output: HAL 9000 -->

Некоторые фильтры принимают параметры. Фильтры можно также объединять, при этом они применяются в порядке слева направо.

{{ 2 | times: 2 | minus: 1 }} <!-- Output: 3 -->

{{ "Hello, " | append: user.firstname }} <!-- Output: Hello, Dave -->

В приведенном ниже разделе описаны разные фильтры.

Фильтры массива

Фильтры массива используются для работы с массивами.

batch

Разделяет массив на несколько массивов указанного размера.

Код

{% assign batches = entityview.records | batch: 2 %}

{% for batch in batches %}

<ul>

{% for item in batch %}

<li>{{ item.fullname }}</li>

{% endfor %}

</ul>

{% endfor %}

Вывод

<ul>

<li>John Smith</li>

<li>Dave Thomas</li>

</ul>

<ul>

<li>Jake Johnson</li>

<li>Jack Robinson</li>

</ul>

concat

Объединяет два массива в один новый массив.

Если в качестве параметра указан один элемент, concat возвращает новый массив, состоящий из исходного массива с указанным элементом в качестве последнего элемента.

Код

Group #1: {{ group1 | join: ', ' }}

Group #2: {{ group2 | join: ', ' }}

Group #1 + Group #2: {{ group1 | concat: group2 | join: ', ' }}

Вывод

Group #1: John, Pete, Hannah

Group #2: Joan, Bill

Group #1 + Group #2: John, Pete, Hannah, Joan, Bill

except

Выбирает все объекты в массиве, у которых указанный атрибут не имеет заданного значения. (Это противоположно where.)

Код

{% assign redmond = entityview.records | except: 'address1_city', 'Redmond' %}

{% for item in redmond %}

{{ item.fullname }}

{% endfor %}

Выходные данные

Jack Robinson

первая

Возвращает первый элемента массива.

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

Код

{% assign words = This is a run of text | split:   %}

{{ words | first }}

{% if words.first == This %}

The first word is This.

{% endif %}

Вывод

This

The first word is This.

group_by

Группирование элементов в массиве по указанному атрибуту.

Код

{% assign groups = entityview.records | group_by: 'address1_city' %}

{% for group in groups %}

{{ group.key }}:

{% for item in group.items %}

{{ item.fullname }}

{% endfor %}

{% endfor %}

Вывод

Redmond:

John Smith

Dave Thomas

Jake Johnson

New York:

Jack Robinson

join

Объединение элементов массива с символом, переданным в качестве параметра. Результатом является одна строка.

Код

{% assign words = This is a run of text | split:   %}

{{ words | join: ,  }}

Вывод

This, is, a, run, of, text

последняя

Возвращает последний элемента массива.

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

Код

{% assign words = This is a run of text | split:   -%}

{{ words | last }}

{% if words.last == text -%}

The last word is text.

{% endif -%}

Выходные данные

text

The last word is text.

order_by

Возвращает элементы массива, упорядоченные по указанному атрибуту элементов массива.

При необходимости можно указать desc в качестве второго параметра для сортировки элементов в убывающем порядке, а не в восходящем.

Код

{{ entityview.records | order_by: 'fullname' | join: ', ' }}

{{ entityview.records | order_by: 'fullname', 'desc' | join: ', ' }}

Выходные данные

Dave Thomas, Jack Robinson, Jake Johnson, John Smith

John Smith, Jake Johnson, Jack Robinson, Dave Thomas

random

Возвращает один случайно выбранный элемент из массива.

Код

{{ group1 | join: ', ' }}

{{ group1 | random }}

Выходные данные

John, Pete, Hannah

Pete

select

Выбирает значение указанного атрибута для каждого элемента в массиве и возвращает эти значения в виде массива.

Код

{{ entityview.records | select: 'address1_city' | join: ', ' }}

Вывод

Redmond, New York

shuffle

При применении к массиву возвращает новый массив с теми же элементами, расположенными в случайном порядке.

Код

{{ group1 | join: ', ' }}

{{ group1 | shuffle | join: ', ' }}

Вывод

John, Pete, Hannah

Hannah, John, Pete

size

Возвращает число элементов в массиве.

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

Код

{% assign words = This is a run of text | split:   -%}

{{ words | size }}

{% if words.size == 6 -%}

The text contains 6 words.

{% endif -%}

Вывод

6

The text contains 6 words.

skip

Пропускает указанное число элементов в массиве и возвращает остальные.

Код

{% assign words = This is a run of text | split:   %}

{{ words | skip: 3 | join: ', ' }}

Вывод

run, of, text

take

Извлекает указанное число элементов из массива, возвращая эти элементы.

Код

{% assign words = This is a run of text | split:   %}

{{ words | take: 3 | join: ', ' }}

Выходные данные


This, is, a

then_by

Добавляет дополнительную последующую сортировку к массиву, уже отсортированному с помощью параметра order_by.

При необходимости можно указать desc в качестве второго параметра для сортировки элементов в убывающем порядке, а не в восходящем.

Код

{{ entityview.records | order_by: 'address1_city' | then_by: 'fullname' | join: ', ' }}

{{ entityview.records | order_by: 'address1_city' | then_by: 'fullname', 'desc' | join: ', ' }}

Вывод

Dave Thomas, Jack Robinson, Jake Johnson, John Smith

John Smith, Jake Johnson, Jack Robinson, Dave Thomas

где

Выбирает все объекты в массиве, у которых указанный атрибут имеет заданное значение.

Код

{% assign redmond = entityview.records | where: 'address1_city', 'Redmond' %}

{% for item in redmond %}

{{ item.fullname }}

{% endfor %}

Вывод

John Smith

Dave Thomas

Jake Johnson

Фильтры по дате

Фильтры по дате можно использовать для арифметических действий с датами или для преобразования значений DateTime в различные форматы.

Дата

Форматирует значение DateTime с помощью строки формата .NET.

Стандартные строки формата даты и времени

Настраиваемые строки формата даты и времени

Код

{{ now | date: 'g' }}

{{ now | date: 'MMMM dd, yyyy' }}

Выходные данные

5/7/2018 7:20 AM

May 07, 2018

date_add_days

Добавляет указанное целое или дробное число дней к значению DateTime. Параметр может быть положительным или отрицательным.

Код

{{ now }}

{{ now | date_add_days: 1 }}

{{ now | date_add_days: -2.5 }}

Выходные данные

5/7/2018 7:20:46 AM

5/8/2018 7:20:46 AM

5/4/2018 7:20:46 PM

date_add_hours

Добавляет указанное целое или дробное число часов к значению DateTime. Параметр может быть положительным или отрицательным.

Код

{{ now }}

{{ now | date_add_hours: 1 }}

{{ now | date_add_hours: -2.5 }}

Выходные данные

5/7/2018 7:20:46 AM

5/7/2018 8:20:46 AM

5/7/2018 4:50:46 AM

date_add_minutes

Добавляет указанное целое или дробное число минут к значению DateTime. Параметр может быть положительным или отрицательным.

Код

{{ now }}

{{ now | date_add_minutes: 10 }}

{{ now | date_add_minutes: -2.5 }}

Выходные данные

5/7/2018 7:20:46 AM

5/7/2018 7:30:46 AM

5/7/2018 7:18:16 AM

date_add_months

Добавляет указанное целое или дробное число месяцев к значению DateTime. Параметр может быть положительным или отрицательным.

Код

{{ now }}

{{ now | date_add_months: 1 }}

{{ now | date_add_months: -2 }}

Выходные данные

5/7/2018 7:20:46 AM

6/7/2018 7:20:46 AM

3/7/2018 7:20:46 AM

date_add_seconds

Добавляет указанное целое или дробное число секунд к значению DateTime. Параметр может быть положительным или отрицательным.

Код

{{ now }}

{{ now | date_add_seconds: 10 }}

{{ now | date_add_seconds: -1.25 }}

Выходные данные

5/7/2018 7:20:46 AM

5/7/2018 7:20:56 AM

5/7/2018 7:20:45 AM

date_add_years

Добавляет указанное целое или дробное число лет к значению DateTime. Параметр может быть положительным или отрицательным.

Код

{{ now }}

{{ now | date_add_years: 1 }}

{{ now | date_add_years: -2 }}

Выходные данные

5/7/2018 7:20:46 AM

5/7/2019 7:20:46 AM

5/7/2016 7:20:46 AM

date_to_iso8601

Форматирует значение DateTime в соответствии со стандартом ISO 8601. Полезно при создании веб-каналов Atom или элементов <time> HTML5.

Код

{{ now | date_to_iso8601 }}

Выходные данные

2018-05-07T07:20:46Z

date_to_rfc822

Форматирует значение DateTime в соответствии со стандартом RFC 822. Полезно при создании RSS-каналов.

Код

{{ now | date_to_rfc822 }}

Выходные данные

Mon, 07 May 2018 07:20:46 Z

Escape-фильтры

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

Следующие escape-фильтры заменяют строковые символы escape-последовательностями или удаляют недопустимые строковые символы в зависимости от типа назначения.

escape

Кодирует строку с использованием escape-символов HTML.

Код

{{ '<p>test</p>' | escape }}

Выходные данные

&lt;p&gt;test&lt;/p&gt;

html_safe_escape

Преобразует заданную строку HTML в безопасный фрагмент HTML.

Код

{{ '<img src="images/myimage.jpg" onerror="alert(1);">' | html_safe_escape }}

Выходные данные

<img src="images/myimage.jpg">

url_escape

Преобразует строку с использованием escape-символов для URI, для включения в URL-адрес.

Код

{{ 'This & that//' | url_escape }}

Выходные данные

This+%26+that%2F%2F

xml_escape

Преобразует строку с использованием escape-символов для XML, для включения в выходные данные XML.

Код

{{ '<p>test</p>' | xml_escape }}

Выходные данные

&lt;p&gt;test&lt;/p&gt;

Фильтры списка

Фильтры списка используются для работы с определенными значениями атрибута entitylist и для помощи в создании представлений списка.

current_sort

Получает выражение сортировки и возвращает текущее направление сортировки для указанного атрибута.

Код

{{ 'name ASC, createdon DESC' | current_sort: 'createdon' }}

Выходные данные

DESC

metafilters

Разбирает значение JSON entitylist filter_definition на объекты группы параметров фильтра.

metafilters могут (необязательно) предоставляться с текущим запросом фильтра атрибутов и текущим entitylist, позволяя, чтобы возвращаемые объекты фильтра помечались как выбранные или невыбранные.

Код

{% assign filters = entitylist | metafilters: params.mf, entityview %}
{% if filters.size > 0 %}
  <ul id=entitylist-filters>
    {% for filter in filters %}
      <li class=entitylist-filter-option-group>
        {% if filter.selection_mode == 'Single' %}
          {% assign type = 'radio' %}
        {% else %}
          {% assign type = 'checkbox' %}
        {% endif %}
        <h4 class=entitylist-filter-option-group-label
          data-filter-id={{ filter.id | h }}>
          {{ filter.label | h }}
        </h4>
        <ul>
          {% for option in filter.options %}
            <li class=entitylist-filter-option>
              {% if option.type == 'text' %}
                <div class=input-group entitylist-filter-option-text>
                  <span class=input-group-addon>
                    <span class=fa fa-filter aria-hidden=true></span>
                  </span>
                  <input class=form-control
                    type=text
                    name={{ filter.id | h }}
                    value={{ option.text | h }} />
                </div>
              {% else %}
                <div class={{ type | h }}>
                  <label>
                    <input
                      type={{ type | h }}
                      name={{ filter.id | h }}
                      value={{ option.id | h }}
                      {% if option.checked %}
                        checked=checked
                        data-checked=true{% endif %}
                      />
                    {{ option.label | h }}
                  </label>
                </div>
              {% endif %}
            </li>
          {% endfor %}
        </ul>
      </li>
    {% endfor %}
  </ul>
  <button class=btn btn-default data-serialized-query=mf data-target=#entitylist-filters>Apply Filters</button>
{% endif %}

reverse_sort

Получает направление сортировки и возвращает противоположное направление сортировки.

Код

<!-- Sort direction is not case-sensitive -->

{{ 'ASC' | reverse_sort }}

{{ 'desc' | reverse_sort }}

Вывод

DESC

ASC

Математические фильтры

Математические фильтры позволяют выполнять математические операции с числами.

Как и любые другие фильтры, математические фильтры можно последовательно объединять, при этом они применяются в порядке слева направо.

Код

{{ 10 | times: 2 | minus: 5 | divided_by: 3 }}

Вывод

5

ceil

Округляет значение вверх до ближайшего целого.

Код

{{ 4.6 | ceil }}

{{ 4.3 | ceil }}

Выходные данные

5

5

divided_by

Делит число на другое число.

Код

{{ 10 | divided_by: 2 }}

{{ 10 | divided_by: 3 }}

{{ 10.0 | divided_by: 3 }}

Выходные данные

5

3

3.333333

floor

Округляет значение вниз до ближайшего целого.

Код

{{ 4.6 | floor }}

{{ 4.3 | floor }}

Вывод

4

4

minus

Вычитает число из другого числа.

Код

<!-- entityview.page = 11 -->

{{ entityview.page | minus: 1 }}

{{ 10 | minus: 1.1 }}

{{ 10.1 | minus: 1 }}

Вывод

10

9

9.1

modulo

Делит число на другое число и возвращает остаток.

Код

{{ 12 | modulo: 5 }}

Вывод

2

plus

Добавляет число к другому числу.

Код

<!-- entityview.page = 11 -->

{{ entityview.page | plus: 1 }}

{{ 10 | plus: 1.1 }}

{{ 10.1 | plus: 1 }}

Вывод

12

11

11.1

round

Округляет значение до ближайшего целого или до указанного числа знаков после запятой.

Код

{{ 4.6 | round }}

{{ 4.3 | round }}

{{ 4.5612 | round: 2 }}

Вывод

5

4

4.56

times

Умножает число на другое число.

Код

{{ 10 | times: 2 }}

{{ 10 | times: 2.2 }}

{{ 10.1 | times: 2 }}

Вывод

20

20

20.2

Строковые фильтры

Строковые фильтры обрабатывают строки.

append

Добавляет строку в конец другой строки.

Код

{{ 'filename' | append: '.js' }}

Выходные данные

filename.js

capitalize

преобразует каждое слово строки в прописные буквы.

Код

{{ 'capitalize me' | capitalize }}

Выходные данные

Capitalize Me

downcase

Преобразует строку в строчные буквы.

Код

{{ 'MIxed Case TExt' | downcase }}

Выходные данные

mixed case text

newline_to_br

Вставит тег новой строки HTML <br /> для каждого разрыва строки в строке.

Код

{% capture text %}

A

B

C

{% endcapture %}

{{ text | newline_to_br }}

Вывод

A<br />

B<br />

C<br />

prepend

Добавляет строку в начало другой строки.

Код

{{ 'Jane Johnson' | prepend: 'Dr. ' }}

Вывод

Dr. Jane Johnson

remove

Удаляет все вхождения подстроки из строки.

Код

{{ 'Hello, Dave. How are you, Dave?' | remove: 'Dave' }}

Выходные данные

Hello, . How are you, ?

remove_first

Удаляет первое вхождение подстроки из строки.

Код

{{ 'Hello, Dave. How are you, Dave?' | remove_first: 'Dave' }}

Вывод

Hello, . How are you, Dave?

replace

Заменяет все вхождения строки на подстроку.

Код

{{ 'Hello, Dave. How are you, Dave?' | replace: 'Dave', 'John' }}

Выходные данные

Hello, John. How are you, John?

replace_first

Заменяет первое вхождение строки на подстроку.

Код

{{ 'Hello, Dave. How are you, Dave?' | replace_first: 'Dave', 'John' }}

Вывод

Hello, John. How are you, Dave?

split

Фильтр split принимает подстроку в качестве параметра. Эта подстрока используется в качестве разделителя, чтобы разделить строку в массив.

Код

{% assign words = This is a demo of the split filter | split: ' ' %}

First word: {{ words.first }}

First word: {{ words[0] }}

Second word: {{ words[1] }}

Last word: {{ words.last }}

All words: {{ words | join: ', ' }}

Выходные данные

First word: This

First word: This

Second word: is

Last word: filter

All words: This, is, a, demo, of, the, split, filter

strip_html

Удаляет все теги HTML из строки.

Код

<p>Hello</p>

Выходные данные

Hello

strip_newlines

Удаляет все знаки перевода строки из строки.

Код

{% capture text %}

A

B

C

{% endcapture %}

{{ text | strip_newlines }}

Выходные данные

ABC

text_to_html

Форматирует обычную текстовую строку как простой HTML. Текст закодирован в формате HTML, блоки текста, разделенные пустой строкой, будут заключены в теги абзаца <p>, одиночные разрывы строк будут заменены на <br>, а URL-адреса преобразованы в гиперссылки.

Код

{{ note.notetext | text_to_html }}

Выходные данные

<p>This is the first paragraph of notetext. It contains a URL: <a href="https://example.com/" rel="nofollow">https://example.com</a></p>

<p>This is a second paragraph.</p>

truncate

Обрезает строку до указанного числа знаков. Многоточие (...) добавляется к строке и включается в число символов.

Код

{{ 'This is a long run of text.' | truncate: 10 }}

Выходные данные

This is...

truncate_words

Обрезает строку до указанного числа слов. Многоточие (...) добавляется в конец обрезанной строки.

Код

{{ 'This is a long run of text.' | truncate_words: 3 }}

Выходные данные

This is a...

upcase

Преобразует строку в заглавные буквы.

Код

{{ 'MIxed Case TExt' | upcase }}

Выходные данные

MIXED CASE TEXT

Фильтры типов

Фильтры типов позволяют преобразовывать значения одного типа в другие типы.

boolean

Пытается преобразовать строковое значение в логическое. Если значение уже является логическим, оно возвращается без изменений. Если значение невозможно преобразовать в логическое, возвращается значение NULL.

Этот фильтр также принимает значения "вкл.", "включено" или "да" как true, и значения "откл.", "отключено" и "нет" как false.

Код

{{ true | boolean }}

{{ 'false' | boolean }}

{{ 'enabled' | boolean }}

{{ settings['something/enabled'] | boolean | default: false }}

Вывод

true

false

true

false

десятичное

Пытается преобразовать строковое значение в десятичное число. Если значение уже является десятичным числом, оно возвращается без изменений. Если значение невозможно преобразовать в десятичное число, возвращается значение NULL.

Код

{{ 10.1 | decimal }}

{{ '3.14' | decimal }}

{{ 'text' | decimal | default: 3.14 }}

Вывод

10.1

3.14

3.14

integer

Пытается преобразовать строковое значение в целое число. Если значение уже является целым числом, оно возвращается без изменений. Если значение невозможно преобразовать в целое число, возвращается значение NULL.

Код

{{ 10 | integer }}

{{ '10' | integer }}

{{ '10.1' | integer }}

{{ 'text' | integer | default: 2 }}

Выходные данные

10

10

2

string

Пытается преобразовать значение в его строковое представление. Если значение уже является строкой, оно возвращается без изменений. Если значение равно NULL, возвращается значение NULL.

Фильтры URL-адреса

Фильтры URL-адреса позволяют генерировать или извлекать части URL-адреса.

add_query

Добавляет параметр строки запроса к URL-адресу. Если параметр уже существует в URL-адресе, значение параметра обновляется.

Если фильтр применяется к полному абсолютному URL-адресу, создается обновленный абсолютный URL-адрес. Если он применяется к пути, получается обновленный путь.

Код

{{ 'https://example.com/path?page=1' | add_query: 'foo', 'bar' }}

{{ '/path?page=1' | add_query: 'page', 2 }}

Выходные данные

https://example.com/path?page=1&foo=bar

/path?page=2

base

Получает базовый URL-адрес для указанного URL-адреса.

Код

{{ 'https://example.com/path?foo=bar&page=2' | base }}

Вывод

https://example.com

host

Получает часть URL-адреса, соответствующую узлу.

Код

{{ 'https://example.com/path?foo=bar&page=2' | host }}

Выходные данные

example.com

path

Получает часть URL-адреса, соответствующую пути.

Код

{{ 'https://example.com/path?foo=bar&page=2' | path }}

{{ '/path?foo=bar&page=2' | path }}

Выходные данные

/path

/path

path_and_query

Получает часть URL-адреса, представляющую путь и запрос.

Код

{{ 'https://example.com/path?foo=bar&page=2' | path_and_query }}

{{ '/path?foo=bar&page=2' | path_and_query }}

Выходные данные

/path?foo=bar&page=2

/path?foo=bar&page=2

port

Получает номер порта URL-адреса.

Код

{{ 'https://example.com/path?foo=bar&page=2' | port }}

{{ 'https://example.com/path?foo=bar&page=2' | port }}

{{ 'https://example.com:9000/path?foo=bar&page=2' | port }}

Выходные данные

80

443

9000

remove_query

Удаляет параметр строки запроса из URL-адреса. Если параметр не существует в URL-адресе, URL-адрес возвращается без изменений.

Если фильтр применяется к полному абсолютному URL-адресу, создается обновленный абсолютный URL-адрес. Если он применяется к пути, получается обновленный путь.

Код

{{ 'https://example.com/path?page=1' | remove_query: 'page' }}

{{ '/path?page=1' | remove_query: 'page' }}

Выходные данные

https://example.com/path

/path

scheme

Получает часть URL-адреса, соответствующую схеме.

Код

{{ 'https://example.com/path?foo=bar&page=2' | scheme }}

{{ 'https://example.com/path?foo=bar&page=2' | scheme }}

Вывод

http

https

Дополнительные фильтры

Эти фильтры предоставляют полезные общие функции.

default

Возвращает значение по умолчанию для любой переменной, которой не назначено значение (т. е., NULL).

Код

{{ snippets[Header] | default: 'My Website' }}

Выходные данные

<!-- If a snippet with the name Header returns null -->

My Website

file_size

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

Если требуется, можно передать параметр точности, чтобы управлять количеством десятичных знаков в результате. Точность по умолчанию — 1.

Код

{{ 10000000 | file_size }}

{{ 2050 | file_size: 0 }}

{{ entity.notes.first.filesize | file_size: 2 }}

Выходные данные

9.5 MB

2 KB

207.14 KB

ч

Предоставляет HTML-представление атрибута. Например, показано HTML-представление XML-атрибута FetchXML запроса.

Код

{{ samplequery.xml | h }}

Выходные данные

<fetch mapping="logical" count="5000" page="1" returntotalrecordcount="true"> <entity name="contact"> <attribute name="fullname" /> </entity> </fetch>

has_role

При применении к user возвращает значение true, если пользователь принадлежит указанной роли. В противном случае возвращает значение false.

Код

{% assign is_admin = user | has_role: 'Administrators' %}

{% if is_admin %}

User is an administrator.

{% endif %}

liquid

Представляет строку в виде кода Liquid. Этот код имеет доступ к текущему контексту выполнения Liquid (переменные и т. д.).

Заметка

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

Код

{{ page.adx_copy | liquid }}

См. также