Twig наследование шаблонов

  • »
  • Уроки»
  • PHP»
  • Обработчик шаблонов Twig. Быстрый старт.
  • Метки урока:
  • php
  • twig
  • шаблонизатор
  • шаблон

На сегодняшний день существует большое количество способов осуществить вывод на html страницу.

Всё чаще и чаще для этих целей веб разработчики пользуются так называемыми шаблонизаторами. Сегодня мы рассмотрим небольшой пример использования шаблонизатора Twig.

Содержание

Особенности Twig

  • феноменально быстрая скорость работы (в сравнении с другими шаблонизаторами)
  • компиляция шаблонов в хорошо оптимизированный PHP код
  • применение “наследования” (можно определить базовый и дочерние шаблоны)
  • позволяет создавать и использовать макросы

Установка

Существует множество способов установки Twig-a. Самый простой и быстрый – это скачивание компонента с GitHub, после чего архив необходимо распаковать, и перекинуть каталог lib в папку с нашим проектом.

Структура проекта

Ну а теперь давайте приступим к делу и рассмотрим структуру нашего небольшого проекта:

  • compilation_cache
  • lib
  • templates
  • index.php

Весь функционал, связанный с подключением и настройкой Twig-а, содержится в файле index.php.

В папке templates мы будем хранить файлы шаблонов. В нашем случае, этих файлов 2: base.html с базовым html кодом и books.html с выводом списка книг.

В каталоге compilation_cache будут помещаться PHP файлы, созданные Twig-ом для работы.

Подключение и базовая конфигурация Twig-a

Итак, первое что нам необходимо сделать, так это подключить Twig:

require_once ‘lib/Twig/Autoloader.php’; Twig_Autoloader::register();

После этого сообщаем шаблонизатору, где у нас хранятся файлы шаблонов. В качестве аргумента передаём путь к каталогу templates:

$loader = new Twig_Loader_Filesystem(‘templates’);

Затем создаём объект шаблонизатора и указываем ещё несколько опций:

$twig = new Twig_Environment($loader, array( ‘cache’ => ‘compilation_cache’, ‘auto_reload’ => true ));

Параметру cache передаём путь к каталогу compilation_cache.

Активируем опцию auto_reload, для того чтобы при обновлении страницы Twig заново обрабатывал шаблоны, и мы видели изменения. Если этого не сделать, то шаблонизатор просто закэширует страницы.

Когда же работа над проектом будет завершена, эту опцию можно убрать, чтобы ваши страницы закэшировались и грузились ещё быстрее.

Данные

Для реализации нашего небольшого примера, возьмём список книг и сформируем массив вида ключ – значение:

$books = array( array(‘number’ => ‘Книга 1’, ‘title’ => ‘Гарри Поттер и философский камень’, ‘date’ => ‘30.06.1997’), array(‘number’ => ‘Книга 2’, ‘title’ => ‘Гарри Поттер и Тайная комната’, ‘date’ => ‘2.07.1998’), array(‘number’ => ‘Книга 3’, ‘title’ => ‘Гарри Поттер и узник Азкабана’, ‘date’ => ‘8.07.1999’), array(‘number’ => ‘Книга 4’, ‘title’ => ‘Гарри Поттер и Кубок огня’, ‘date’ => ‘8.07.2000’), array(‘number’ => ‘Книга 5’, ‘title’ => ‘Гарри Поттер и Орден Феникса’, ‘date’ => ‘21.07.2003’), array(‘number’ => ‘Книга 6’, ‘title’ => ‘Гарри Поттер и Принц-полукровка’, ‘date’ => ‘16.07.2005’), array(‘number’ => ‘Книга 7’, ‘title’ => ‘Гарри Поттер и Дары Смерти’, ‘date’ => ‘21.07.2007’) );

Загрузка файла и передача данных

Для того чтобы передать данные в какой-то шаблон и вывести html результат, нам необходимо воспользоваться методом render(); В качестве первого аргумента передаём название файла шаблона, который будем выводить. В качестве второго -массив вида ключ – значение. В дальнейшем по заданным ключам мы будем получать доступ к нашим данным в самих шаблонах.

echo $twig->render(‘books.html’, array(‘books’ => $books));

index.php

Общий вид файла index.php

require_once ‘lib/Twig/Autoloader.php’; Twig_Autoloader::register(); $loader = new Twig_Loader_Filesystem(‘templates’); $twig = new Twig_Environment($loader, array( ‘cache’ => ‘compilation_cache’, ‘auto_reload’ => true )); $books = array( array(‘number’ => ‘Книга 1’, ‘title’ => ‘Гарри Поттер и философский камень’, ‘date’ => ‘30.06.1997’), array(‘number’ => ‘Книга 2’, ‘title’ => ‘Гарри Поттер и Тайная комната’, ‘date’ => ‘2.07.1998’), array(‘number’ => ‘Книга 3’, ‘title’ => ‘Гарри Поттер и узник Азкабана’, ‘date’ => ‘8.07.1999’), array(‘number’ => ‘Книга 4’, ‘title’ => ‘Гарри Поттер и Кубок огня’, ‘date’ => ‘8.07.2000’), array(‘number’ => ‘Книга 5’, ‘title’ => ‘Гарри Поттер и Орден Феникса’, ‘date’ => ‘21.07.2003’), array(‘number’ => ‘Книга 6’, ‘title’ => ‘Гарри Поттер и Принц-полукровка’, ‘date’ => ‘16.07.2005’), array(‘number’ => ‘Книга 7’, ‘title’ => ‘Гарри Поттер и Дары Смерти’, ‘date’ => ‘21.07.2007’) ); echo $twig->render(‘books.html’, array(‘books’ => $books));

Настройка базового шаблона

Базовый шаблон представляет собой обычный html документ со специальными вставками:

{% block content %} {% endblock %}

В нашем главном шаблоне мы прописываем 2 блока: title и content. Названия блоков выбираем сами.

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

Настройка шаблона вывода книг

Для начала в дочернем шаблоне нам необходимо указать шаблон родителя:

{% extends “base.html” %}

Далее в блок title запишем название дочерней страницы, которая обработается Twig-ом и вставится между тегами title в базовом шаблоне:

{% block title %}Серия романов о Гарри Поттере{% endblock %}

Затем, пишем содержание, которое внедрится в блок под названием content в базовом шаблоне:

{% block content %}

Серия романов о Гарри Поттере


{% for book in books %} {{book.number}}. “{{book.title}}” – {{book.

date}} {% endfor %} {% endblock %}

Тут же в цикле for (Twig for) мы проходимся по всем книгам, которые передали в данный шаблон с помощью записи $twig->render(‘books.

html’, array(‘books’ => $books)); и для извлечения значений обращаемся к элементам массива по ключам: {{book.number}}, {{book.title}} и так далее.

Таким образом, после срабатывания метода $twig->render(‘books.html’, array(‘books’ => $books)), Twig подгрузит шаблон books.html и сформирует html содержание. Далее он распознает, что books.html – это дочерний шаблон base.html, и поместит сформированное содержание в базовый шаблон. После всего этого Twig вернёт нам полноценную html страницу.

Итог

Пример работы данного скрипта вы можете посмотреть в demo или скачать архив с готовым примером.

Источник: https://ruseller.com/lessons.php?id=1648

Twig для дизайнеров шаблонов

Twig 2 – Twig for Template Designers

Этот документ описывает синтаксис и семантику механизма шаблона и будет наиболее полезен в качестве ссылки на те, которые создают шаблоны Twig.

конспект

Шаблон – это просто текстовый файл. Он может генерировать любой текстовый формат (HTML, XML, CSV, LaTeX и т. Д.). У него нет определенного расширения, .html или .xml просто отлично.

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

Ниже приведен минимальный шаблон, который иллюстрирует несколько основ. Ниже мы расскажем о следующих деталях:

    {% for item in navigation %}

  • {{ item.caption }}
  • {% endfor %}

My Webpage


{{ a_variable }}

Существует два типа разделителей: {% … %} и {{ … }} . Первый используется для выполнения таких операторов, как for-loops, последний печатает результат выражения в шаблоне.

Интеграция с IDE

Многие IDE поддерживают подсветку синтаксиса и автозаполнение для Twig:

Кроме того, TwigFiddle – это онлайн-сервис, который позволяет вам создавать шаблоны Twig из браузера; он поддерживает все версии Twig.

переменные

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

Вы можете использовать точку ( . ) Для доступа к атрибутам переменной (методы или свойства объекта PHP или элементы массива PHP) или так называемый синтаксис «индекс» ( [] ):

{{ foo.bar }}{{ foo[‘bar’] }}

Когда атрибут содержит специальные символы (например, который будет интерпретироваться как оператор минус), используйте функцию attribute вместо этого, чтобы получить доступ к атрибуту переменной:

{# equivalent to the non-working foo.data-foo #}{{ attribute(foo, ‘data-foo’) }}

Заметка

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

Если переменная или атрибут не существует, вы получите null значение, если для параметра strict_variables установлено значение false ; альтернативно, если установлено strict_variables , Twig strict_variables ошибку (см. параметры среды ).

Заметка

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

Глобальные переменные

В шаблонах всегда доступны следующие переменные:

  • _self : ссылается на текущее имя шаблона;
  • _context : ссылается на текущий контекст;
  • _charset : ссылается на текущую кодировку.

Установка переменных

Вы можете назначать значения для переменных внутри кодовых блоков. В назначениях используется тег set :

{% set foo = ‘foo’ %}{% set foo = [1, 2] %}{% set foo = {‘foo’: ‘bar’} %}

фильтры

Переменные могут быть изменены фильтрами . Фильтры отделяются от переменной символом ( | ) и могут иметь необязательные аргументы в круглых скобках. Несколько фильтров могут быть скованы цепью. Выход одного фильтра применяется к следующему.

В следующем примере удаляются все теги HTML из name и заголовков:

{{ name|striptags|title }}

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

{{ list|join(‘, ‘) }}

Чтобы применить фильтр к разделу кода, оберните его в тег filter :

{% filter upper %} This text becomes uppercase{% endfilter %}

Перейдите на страницу filters чтобы узнать больше о встроенных фильтрах.

функции

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

Например, функция range возвращает список, содержащий арифметическую прогрессию целых чисел:

{% for i in range(0, 3) %} {{ i }},{% endfor %}

Перейдите на страницу functions чтобы узнать больше о встроенных функциях.

Именованные аргументы

{% for i in range(low=1, high=10, step=2) %} {{ i }},{% endfor %}

Использование именованных аргументов делает ваши шаблоны более явными в отношении значений значений, которые вы передаете в качестве аргументов:

{{ data|convert_encoding(‘UTF-8’, ‘iso-2022-jp’) }} {# versus #} {{ data|convert_encoding(from=’iso-2022-jp’, to=’UTF-8′) }}

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

{# the first argument is the date format, which defaults to the global date format if null is passed #}{{ “now”|date(null, “Europe/Paris”) }} {# or skip the format value by using a named argument for the time zone #}{{ “now”|date(timezone=”Europe/Paris”) }}

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

{{ “now”|date(‘d/m/Y H:i’, timezone=”Europe/Paris”) }}

Наконечник

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

Структура управления

Структура управления относится ко всем тем вещам, которые управляют потоком программы – условностями (т.е. if / elseif / else ), for -loops, а также такими вещами, как блоки. Структуры управления отображаются внутри блоков {% … %} .

Например, чтобы отобразить список пользователей, предоставленных в переменной, называемой users , используйте тег for :

Members

    {% for user in users %}

  • {{ user.username|e }}
  • {% endfor %}

Тег if может использоваться для проверки выражения:

{% if users|length > 0 %}

    {% for user in users %}

  • {{ user.username|e }}
  • {% endfor %}

{% endif %}

Перейдите на страницу tags чтобы узнать больше о встроенных тегах.

Источник: https://code-examples.net/ru/docs/twig~2/templates

Twig наследование шаблонов

Как наследовать шаблоны?
Например, это основной шаблон main.tpl

А это дочерний шаблон children.tpl

Но при выводе так

шаблон, который расширяет другой не может иметь тело в «children.tpl»

Но при выводе основного шаблона всё нормально. Думаю, что с загрузкой шаблона что-то напутал. И надо ли дочерний шаблон загружать?
Заранее спасибо.

Непонятно, зачем приведен перевод ошибки. В оригинале звучит так:

A template that extends another one cannot have a body in .

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

Дочерний шаблон можно заранее не загружать, а передать первым параметром метода render

Создание шаблона страницы в Twig

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

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

Комментирование в Twig

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

Если на основе этого класса создать новый объект (назовем его myBox) и передать его в шаблон Twig, можно использовать его следующим образом. Чтобы вывести атрибут $shape, нужно указать:

Чтобы вывести метод displayShape():

Операции с массивами выполняются подобным образом. Предположим, myBox является массивом с ключом shape. Чтобы вывести его, используйте тот же синтаксис, что и для атрибута объекта:

Кроме того, Twig позволяет задать новые переменные в файле шаблона с помощью разделителя :

Еще одно весомое преимущество Twig – наличие ряда весьма полезных и простых в использовании фильтров. Проще всего рассмотреть данные фильтры на примере:

Это вернет значение переменной shape заглавными буквами. При необходимости можно объединить несколько фильтров:

Этот фильтр обрезает пробелы в начале и в конце значения переменной. Кроме того, фильтры можно применять на целый блок:

Данное выражение переведет все в пределах блока фильтра в верхний регистр.

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

Управляющие структуры

Поскольку ни один файл шаблона не может обойтись без цикла или оператора if/else, Twig также позволяет использовать различные управляющие структуры. Например, чтобы постоянно повторять цикл foreach, используйте:

Этот код замкнется на массиве shapes и будет выводить каждую переменную shape. Оператор if/else выглядит примерно так:

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

Добавление и наследование шаблонов

Twig обладает очень важной функцией, которая позволяет добавить шаблон в другой шаблон. Например:

Этот оператор загрузит файл header.html и воспроизведет его в текущем контексте шаблона. Это означает, что файл получит доступ ко всем переменным, находящимся в шаблоне. Благодаря этой особенности Twig позволяет хранить несколько файлов в гораздо более чистом виде.

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

Шаблон А (layout.html) содержит следующее (не забывайте, это всего лишь пример):

Как видите, в уже определенных блоках нет никакого контента. При желании его можно добавить, но можно также расширить этот шаблон при помощи шаблона В и добавить контент в эти блоки:

Как видите, шаблон В расширяет шаблон А (в целом, он заполняет шаблон А и воспроизводит его на странице), а также заполняет его заданные блоки, которые в были пусты. Если бы блоки в шаблоне А были заполнены каким-то контентом, шаблон B перезаписал бы этот контент. Чтобы добавить контент к уже существующему контенту, а не перезаписывать его, нужно использовать формат:

Таким образом, блок mainContent загружает контент родительского шаблона, воспроизводит его и добавляет еще немного контента ниже.

Некоторые ключевые моменты

При расширении шаблона блок extends должен быть первым блоком страницы. Также в таком случае нельзя оставлять контент вне блоков, определенных в расширяемом шаблоне. Поэтому весь контент шаблона В должен входить в один из блоков, определенных в шаблоне А.

Чтобы получить более подробную информацию о наследовании шаблонов, обратитесь к документации Twig.

Данная статья знакомит с созданием шаблонов, использованием управляющих структур и системы комментариев, выводом переменных (как простых, так и сложных вроде массивов и объектов), а также с добавлением и расширением шаблонов.

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

Запомните: Twig является шаблонизатором по умолчанию Symfony2; также он будет включен в выпускаемый вскоре Drupal 8.

Другие статьи серии Twig

В Drupal 8 на замену PHPTemplate пришел шаблонизатор Twig — «компилирующий обработчик шаблонов с открытым исходным кодом, написанный на языке программирования PHP. Armin Ronacher написал Twig в 2008 году для платформы блогов Chyrp.

Он больше не возвращался к разработке и в большей степени занимался разработкой на Python. Синтаксис языка шаблонов Twig берёт начало от движков шаблонов Jinja и Django, первый из которых также создан Ронакером.

Идею данного шаблонизатора развивает и поддерживает Fabien Potencier, ведущий разработчик и идеолог фреймворка Symfony, в котором Twig используется по умолчанию.» (https://ru.wikipedia.org/wiki/Twig).

Читайте так же:  Нотариус щукинской

Все Twig шаблоны в Drupal 8 компилируются в php файлы и хранятся в каталоге sites/default/files/php/twig/. Файлы шаблонов при этом кешируются для повторного использования и перекомпилируются только при очистке Twig кеша.

Все шаблоны в модулях и темах должны находиться в каталоге /templates.

Почему Twig? Во-первых, он более безопасный.

В шаблонах Drupal 7 часто выводились неочищенные данные и это в принципе понятно, так как верстальщик не должен следить за работой программиста, который банально мог забыть пропустить данные из форм через check_plain().

В шаблонах же Drupal 8 переменные будут по-умолчанию экранироваться. Кроме этого многие наверняка в шаблонах наблюдали Sql запросы и прочие изыски логики приложения, но в Twig шаблонах это будет исключено.

Во-вторых, в Twig есть очень интересная особенность — наследование шаблонов. Теперь достаточно создать базовый родительский шаблон и затем при создании дочернего шаблона в теге extends указать родительский шаблон. К примеру чтобы создать дочерний шаблон ноды нужно в нем прописать:

Рассмотрим наследование на примере шаблонов для блока. Базовый родительский шаблон для блока block.html.twig содержит примерно такой код

При этом содержимое тега block можно в дочернем шаблоне переписать. Рассмотрим код шаблона для блока с формой поиска block—search-form-block.html.twig

Дочерний шаблон будет содержать всю разметку block.html.twig за исключением переписанного содержимого внутри тега block:

Именование файлов шаблонов и функций

PHPTemplate файл шаблона: node—article.tpl.php
Twig файл шаблона: node—article.html.twig

Большинство theme_ функций сейчас вынесено в шаблоны (огромный плюс) PHPTemplate функция: theme_node_links()

Twig файл шаблона: node-links.html.twig

Источник: https://narodinteres.ru/5262-twig-nasledovanie-shablonov

Дружим Битрикс и Twig

Таки надоело мне лицезреть и постоянно рассказывать новичкам о том, что нельзя просто так взять, и долбить запросы к БД в шаблонах компонентах. А еще нельзя фигачить бизнес-логику туда же. Все, надоело … будем избавляться. Единственным правильным выходом из этой ситуации мне видится использование шаблонизатора.

Зачем нужен шаблонизатор? Как следует из его названия — для построения шаблонов

Источник: http://zhurov.me/blog/twig-and-bitrix-are-friends.html

Твиг для разработчиков шаблонов | Документация по Twig – PHP шаблонизатору

Этот документ описывает синтаксис и семантику шаблона и будет наиболее полезен для тех, кто создает шаблоны TWIG.

Краткий обзор

Шаблон – это просто текстовый файл. Он может генерировать любой текстовый формат (HTML, XML, CSV, Latex, и т.д.). Он не обязан иметь особого расширения, .html, или .xml расширения подойдут.

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

Ниже приводится минимальный шаблон, который иллюстрирует основы. Мы рассмотрим детали позже:

My Webpage

  • {% for item in navigation %}
  • {{ item.caption }}
  • {% endfor %}

My Webpage

{{ a_variable }}

Есть два вида разделителей: {% … %} И {{ … }}. Первый из них используется для выполнения операторов, таких как for-циклы , последний печатает результат выражения в шаблон.

Интеграция со средами разработки

Многие среды разработки поддерживают подсветку синтаксиса и автодополнение для TWIG.

Переменные

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

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

) чтобы получить доступ к аттрибутам переменной (методы или свойства PHP-объекта или элементы PHP-массива), или так называемый индекс ([]):

{{ foo.bar }} {{ foo[‘bar’] }}

Когда аттрибут содержит специальные символы (такие как – что будет интерпретировано как оператор вычитания ), используйте функцию attribute вместо доступа к аттрибуту переменной.

{# equivalent to the non-working foo.data-foo #} {{ attribute(foo, ‘data-foo’) }} Важно знать,что фигурные скобки не являются переменной, а печатают предложение.
Если вы хотите получить доступ к переменным внутри тегов, не ставьте скобки.

Если переменная или аттрибут не существует, вы получите значение null , когда опция strict_variables установлена false, в обратном случае Twig выбросит ошибку.

Для удобства foo.bar делает следующие вещи на уровне PHP:

  • проверяет является ли foo массивом и bar верным выражением;
  • если нет, и foo является объектом, проверяется что bar является допустимым свойством
  • если нет, и foo является объектом, проверяется что bar является допустимым методом (даже если bar является конструктором – используйте use __construct() вместо этого)
  • если нет, и foo является объектом, проверяется что getBar является допустимым методом
  • если нет, и foo является объектом, проверяется что isBar является допустимым методом
  • если нет, то возвращает значение null

С другой стороны, foo[‘bar’] работает только с массивами PHP:

  • проверяется, является ли foo массивом и bar допустимым элементом
  • если нет , то возвращает значение null

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

Глобальные переменные

Следующие переменные всегда доступны в шаблонах:

  • _self: ссылается на текущий шаблон;
  • _context: ссылается на текущий контекст;
  • _charset: ссылается на текущую кодировку.

Присвоение переменных

Вы можете придать значения переменных внутри блоков кода. Присвоения используют тег set :

{% set foo = ‘foo’ %} {% set foo = [1, 2] %} {% set foo = {‘foo’: ‘bar’} %}

Фильтры

Переменные могут быть изменены с помощью фильтров filters. Фильтры отделяются от переменных с помощью pipe-символа (|) и могут иметь дополнительные аргументы в скобках. Можно объединять несколько фильтров. Выход одного фильтра направляется в следующий.

Следующий пример удаляет все HTML-теги и title из name:

{{ name|striptags|title }}

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

{{ list|join(‘, ‘) }}

Чтобы применить фильтр для секции в коде, оберните его с тегом filter:

{% filter upper %} This text becomes uppercase {% endfilter %}

Чтобы узнать больше о встроенных фильтрах зайдите на страницу filters.

Функции

Можно вызывать функции чтобы генерировать контент. Функции могут быть вызваны по имени со скобками после него и могут иметь аргументы.

Например, функция range возвращает список, содержащий арифметическую прогрессию целых чисел:

{% for i in range(0, 3) %} {{ i }}, {% endfor %}

Чтобы узнать больше о встроенных функциях зайдите на страницу functions.

Именованные аргументы

Поддержка для именованных аргументов была добавлена в Twig 1.12. {% for i in range(low=1, high=10, step=2) %} {{ i }}, {% endfor %}

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

{{ data|convert_encoding(‘UTF-8’, ‘iso-2022-jp’) }} {# versus #} {{ data|convert_encoding(from=’iso-2022-jp’, to=’UTF-8′) }}

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

{# the first argument is the date format, which defaults to the global date format if null is passed #} {{ “now”|date(null, “Europe/Paris”) }} {# or skip the format value by using a named argument for the timezone #} {{ “now”|date(timezone=”Europe/Paris”) }}

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

{{ “now”|date(“d/m/Y H:i”, timezone=”Europe/Paris”) }} Каждая страница документации по функция и фильтрам имеет раздел, где имена всех аргументов выписаны, если они поддерживаются.

Управляющая структура

Управляющая структура относится к тем вещам, которые управляют программой – условия (i.e. if/elseif/else), for-циклы и блоки. Управляющая структура появляется внутри блоков {% … %}.

Например, чтобы показать список всех пользователей, которые записаны в переменной users , используйте тег for:

Members

  • {% for user in users %}
  • {{ user.username|e }}
  • {% endfor %}

Тег if можно использовать чтобы проверить выражение:

{% if users|length > 0 %}

  • {% for user in users %}
  • {{ user.username|e }}
  • {% endfor %}

{% endif %}

Чтобы узнать больше о встроенных тегах зайдите на страницу tags.

Источник: https://x-twig.ru/for_template_designers/