Перейти к содержанию

Фильтры Twig⚓︎

Фильтры Twig применяются к переменным Twig с помощью символа |, за которым следует имя фильтра. Параметры можно передавать так же, как функции Twig, используя круглые скобки.

absolute_url⚓︎

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

{{ '<img src="/some/path/to/image.jpg" />'|absolute_url }}

array_unique⚓︎

Оболочка для PHP array_unique(), которая удаляет дубликаты из массива.

{{ ['foo', 'bar', 'foo', 'baz']|array_unique }}

base32_encode⚓︎

Выполняет кодировку base32 для переменной

{{ 'некоторая переменная'|base32_encode }}

base32_decode⚓︎

Выполняет декодирование base32 на переменной

{{ 'ONXW2ZJAOZQXE2LBMJWGKIDIMVZGK'|base32_decode }}

base64_encode⚓︎

Выполняет кодировку base64 для переменной

{{ 'некоторая переменная'|base64_encode }}

base64_decode⚓︎

Выполняет декодирование base64 на переменной

{{ 'c29tZSB2YXJpYWJsZSBoZXJl'|base64_decode }}

basename⚓︎

Возвращает базовое имя пути.

{{ '/etc/sudoers.d'|basename }}

camelize⚓︎

Преобразует строку в формат "CamelCase"

{{ 'send_email'|camelize }}

chunk_split⚓︎

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

{{ 'ONXW2ZJAOZQXE2LBMJWGKIDIMVZGKA'|chunk_split(6, '-') }}
ONXW2Z-JAOZQX-E2LBMJ-WGKIDI-MVZGKA-

contains⚓︎

Определите, содержит ли конкретная строка другую строку

{{ 'какая-то строка из нескольких слов'|contains('строка') }}

Преобразование значений⚓︎

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

string⚓︎

Используйте |string для приведения значения к строке.

int⚓︎

Используйте |int для приведения значения к целому числу.

bool⚓︎

Используйте |bool для приведения значения к логическому.

float⚓︎

Используйте |float для приведения значения к числу с плавающей запятой.

array⚓︎

Используйте |array для приведения значения к массиву.

defined⚓︎

Иногда вы хотите проверить, определена ли какая-либо переменная, а если нет, укажите значение по умолчанию. Например:

{% set header_image_width  = page.header.header_image_width|defined(900) %}

При этом переменная header_image_width будет установлена в значение 900, если она не определена в заголовке страницы.

dirname⚓︎

Вернуть имя каталога пути.

{{ '/etc/sudoers.d'|dirname }}

ends_with⚓︎

Берет иголку и стог сена и определяет, заканчивается ли стог иглой. Также теперь работает с массивом игл и будет возвращать true, если любой стог сена заканчивается иглой.

{{ 'быстрый коричневый лис'|ends_with('лис') }}

fieldName⚓︎

Фильтрация имени поля путём замены записи через точку на запись массива

{{ 'field.name'|fieldName }}

get_type⚓︎

Получает тип переменной:

{{ page|get_type }}

humanize⚓︎

Преобразует строку в более удобный для чтения формат.

{{ 'какой_то_текст_для_чтения'|humanize }}

hyphenize⚓︎

Преобразует строку в версию с дефисом.

{{ 'Какой То Текст Для Чтения'|hyphenize }}

json_decode⚓︎

Вы можете декодировать JSON, просто применив этот фильтр:

{% set array = '{"first_name": "Guido", "last_name":"Rossum"}'|json_decode %}
{{ print_r(array) }}
stdClass Object
(
    [first_name] => Guido
    [last_name] => Rossum
)

ksort⚓︎

Сортировать карту массива по каждому ключу

array|ksort

{% set ritems = {'orange':1, 'apple':2, 'peach':3}|ksort %}
{% for key, value in ritems %}{{ key }}:{{ value }}, {% endfor %}
Array
(
    [apple] => 2
    [orange] => 1
    [peach] => 3
)

ltrim⚓︎

Удаляет пробелы в начале строки. Он также может удалить другие символы, с помощью маски (см. https://php.net/manual/ru/function.ltrim.php).

{{ '/strip/leading/slash/'|ltrim('/') }}

markdown⚓︎

Возьмите произвольную строку, содержащую разметку, и конвертируйте её в HTML, используя парсер Markdown Grav. Необязательный boolean-параметр:

  • true (по умолчанию): обрабатывать как блок (текстовый режим, содержимое будет заключено в теги <p>)
  • false: обрабатывать как строку (содержимое не будет обернуто никакими тегами)
{{ string|markdown($is_block) }}
<div class="div">
    {{ 'Абзац с **markdown** и [ссылкой](http://www.cnn.com)'|markdown }}
</div>

<p class="paragraph">{{'Строка с **markdown** и [ссылкой](http://www.cnn.com)'|markdown(false) }}</p>

md5⚓︎

Создает md5 хэш для строки

{{ 'что угодно'|md5 }}

modulus⚓︎

Выполняет ту же функциональность, что и символ Modulus % в PHP. Он работает с числом, передавая в числовом делителе и необязательный массив элементов для выбора.

{{ 7|modulus(3, ['red', 'blue', 'green']) }}

monthize⚓︎

Преобразовывает целое число дней в число месяцев

{{ '181'|monthize }}

nicecron⚓︎

Получает читаемый человеком выходной сигнал для синтаксиса cron

{{ "2 * * * *"|nicecron }}

nicefilesize⚓︎

Выводит размер файла в удобочитаемом для человека формате:

{{ 612394|nicefilesize }}

nicenumber⚓︎

Вывод числа в удобочитаемом для человека формате красивых чисел:

{{ 12430|nicenumber }}

nicetime⚓︎

Вывод даты в удобочитаемом для человека формате времени:

{{ page.date|nicetime(false) }}

Первый аргумент указывает, следует ли использовать описание даты в полном формате. По умолчанию это true.

Вы можете указать второй аргумент false, если хотите удалить относительный дескриптор времени (например, «назад» или «с этого момента» на вашем языке) из результата.

of_type⚓︎

Проверяет тип переменной на параметр:

{{ page|of_type('string') }}

ordinalize⚓︎

Добавляет порядковый номер к целому числу (например, 1-е, 2-е, 3-е, 4-е):

{{ '10'|ordinalize }}

pad⚓︎

Заполняет строку до определенной длины другим символом. Это обёртка для PHP-функции str_pad().

{{ 'foobar'|pad(10, '-') }}

pluralize⚓︎

Преобразовывает строку в английскую множественную версию

{{ 'person'|pluralize }}

pluralize также принимает необязательный числовой параметр, который можно ввести, если заранее неизвестно, на сколько элементов будет ссылаться существительное. Значение по умолчанию равно 2, поэтому при опущении будет указана форма множественного числа. Например:

<p>We have {{ num_vacancies }} {{ 'vacancy'|pluralize(num_vacancies) }} right now.</p>

Печатает читабельную информацию о переменной

{{ page.header|print_r }}

randomize⚓︎

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

{{ array|randomize }}
{% set ritems = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten']|randomize(2) %}
{% for ritem in ritems %}{{ ritem }}, {% endfor %}
Array
(
    [0] => one
    [1] => two
    [2] => three
    [3] => eight
    [4] => seven
    [5] => four
    [6] => five
    [7] => six
    [8] => ten
    [9] => nine
)

regex_replace⚓︎

Полезная оболочка для PHP preg_replace() метод, вы можете выполнять сложные замены регулярных выражений в тексте с помощью этого фильтра:

{{ 'The quick brown fox jumps over the lazy dog.'|regex_replace(['/quick/','/brown/','/fox/','/dog/'], ['slow','black','bear','turtle']) }}

По возможности используйте разделитель ~ вместо /. В противном случае вам, скорее всего, придется удвоить определённые символы. Например, ~\/\#.*~~, а не'/\/\#.*/'`, что более соответствует PCRE-синтаксису, используемому PHP.

rtrim⚓︎

{{ '/strip/trailing/slash/'|rtrim('/') }}

Удаляет пробелы в конце строки. Он также может удалить другие символы, с использованием маски (см. https://php.net/manual/ru/function.rtrim.php).

singularize⚓︎

Преобразует строку в английскую единственную версию

{{ 'shoes'|singularize }}

safe_email⚓︎

Фильтр безопасной почты преобразует адрес электронной почты в символы ASCII, что затрудняет распознавание и захват спам-ботов.

{{ "someone@domain.com"|safe_email }}

Пример использования со ссылкой mailto:

<a href="mailto:{{'your.email@server.com'|safe_email}}">
  Email me
</a>

Сначала вы можете и не заметить разницы, но изучение исходного текста страницы (не используя Инструменты разработчика браузера, фактического исходного текста страницы) выявит кодировку, лежащую в основе символов.

sort_by_key⚓︎

Можно сортировать массив по определённому ключу

{{ array|sort_by_key }}
{% set people = [{'email':'fred@yahoo.com', 'id':34}, {'email':'tim@exchange.com', 'id':21}, {'email':'john@apple.com', 'id':2}]|sort_by_key('id') %}
{% for person in people %}{{ person.email }}:{{ person.id }}, {% endfor %}

starts_with⚓︎

Берет иглу и стог сена и определяет, начинается ли стог сена с иглы. Также теперь работает с массивом игл и вернет true, если ни стог сена начинается с иглы.

{{ 'the quick brown fox'|starts_with('the') }}

titleize⚓︎

Преобразует строку в формат «Заголовок»

{{ 'welcome page'|titleize }}

t⚓︎

Переводит строку на текущий язык

{{ 'MY_LANGUAGE_KEY_STRING'|t }}

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

tu⚓︎

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

{{ 'MY_LANGUAGE_KEY_STRING'|tu }}

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

ta⚓︎

Переводит массив на язык с помощью фильтра |ta. См. Подробный пример в документации.

{{ 'MONTHS_OF_THE_YEAR'|ta(post.date|date('n') - 1) }}

tl⚓︎

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

{{ 'SIMPLE_TEXT'|tl(['fr']) }}

truncate⚓︎

Вы можете легко создать сокращенную, усеченную версию строки, используя этот фильтр. Единственное обязательное поле - это количество символов, но есть и другие параметры:

{{ 'одно не слишком длинное предложение. два предложения'|truncate(5)|raw }}

Просто обрезается до 5 символов.

{{ 'одно не слишком длинное предложение. два предложения'|truncate(5, true)|raw }}

При значении второго аргумента true обрезает текст по первому разделителю, встречающемуся на позиции, соответствующей ограничению по количеству символов, или после неё. По умолчанию разделителем является пробел, поэтому в этом примере результат заканчивается на one not, а не в конце предложения.

Третий аргумент позволяет задать другой разделитель. Например, truncate(5, true, '.') для того же входного текста возвращает одно не слишком длинное предложение&hellip;. Точка не включается в результат обрезки; эта опция не определяет границы предложений.

Если на позиции ограничения или после неё нет символа-разделителя, строка вместо этого обрезается непосредственно по ограничению. 'abcdefgh'|truncate(5, true) возвращает abcde&hellip;, поскольку пробела, по которому можно было бы выполнить обрезку, нет.

Фильтр |raw следует использовать с элементом заполнения по умолчанию &hellip; (многоточие), чтобы он отображался с автоматическим экранированием Twig

Вы также можете обрезать текст HTML, но сначала следует использовать фильтр |striptags, чтобы удалить любое форматирование HTML, которое может быть нарушено, если вы остановитесь между тегами:

{{ '<span>одно <strong>не слишком длинное предложение</strong>. два предложения</span>'|raw|striptags|truncate(25) }}

safe_truncate⚓︎

Используйте |safe_truncate для обрезки текста по количеству символов, с сохранением полных слов. Он никогда не разрывает слово, поэтому результат может превышать заданное ограничение и продолжаться до конца слова, в котором оказалась граница: 'alpha bravo charlie'|safe_truncate(3) возвращает alpha&hellip;.

truncate_html⚓︎

Используйте |truncate_html, чтобы обрезать HTML по количеству символов, сохраняя разметку. Эта функция не предотвращает разрыв слов, поэтому слово может быть обрезано посередине. По умолчанию используется ограничение в 100 символов.

{{ '<p>alpha bravo charlie delta echo</p>'|truncate_html(3) }}
<p>alp...</p>

safe_truncate_html⚓︎

Используйте |safe_truncate_html, чтобы обрезать HTML по количеству слов, сохраняя разметку. По умолчанию используется ограничение в 25 слов. Обратите внимание, что эта функция считает слова, тогда как truncate_html считает символы.

{{ '<p>alpha bravo charlie delta echo</p>'|safe_truncate_html(3) }}
<p>alpha bravo charlie...</p>

underscorize⚓︎

Преобразует строку в формат «under_scored»

{{ 'CamelCased'|underscorize }}

wordcount⚓︎

Подсчитывает количество слов в текстовой строке с поддержкой нескольких языков и улучшенной точностью для HTML-контента.

{{ page.content|wordcount }}

Фильтр wordcount также принимает необязательный параметр locale, чтобы корректно обрабатывать разные языки. Для западных языков (английский, испанский, французский и т. д.) он считает отдельные слова, разделённые пробелами. Для азиатских языков, таких как китайский, японский и корейский, он считает символы вместо слов, что более уместно для этих систем письма.

{# С указанием конкретной локали для английского контента #}
{{ page.content|wordcount('en') }}

{# Для китайского контента — считает символы вместо слов #}
{{ page.content|wordcount('zh') }}
{# Использование в структурированных данных JSON-LD #}
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "wordCount": page.content|wordcount,
  "headline": page.title
}
</script>

Поддерживаемые локали: en (английский, по умолчанию), es (испанский), fr (французский), de (немецкий) и другие западные языки используют подсчёт по словам. zh/zh-cn/zh-tw/chinese (китайский), ja/japanese (японский) и ko/korean (корейский) используют подсчёт по символам.

yaml_encode⚓︎

Дамп/кодирование переменной в синтаксис YAML

{% set array = {foo: [0, 1, 2, 3], baz: 'qux' } %}
{{ array|yaml_encode }}
foo:
  - 0
  - 1
  - 2
  - 3
baz: qux

yaml_decode⚓︎

Декодирование/парсинг переменной из синтаксиса YAML

{% set yaml = "foo: [0, 1, 2, 3]\nbaz: qux" %}
{{ yaml|yaml_decode|var_dump }}
array(2) {
  ["foo"]=>
  array(4) {
    [0]=>
    int(0)
    [1]=>
    int(1)
    [2]=>
    int(2)
    [3]=>
    int(3)
  }
  ["baz"]=>
  string(3) "qux"
}