- »
- Уроки»
- PHP»
- Обработчик шаблонов Twig. Быстрый старт.
- Метки урока:
- php
- twig
- шаблонизатор
- шаблон
На сегодняшний день существует большое количество способов осуществить вывод на html страницу.
Всё чаще и чаще для этих целей веб разработчики пользуются так называемыми шаблонизаторами. Сегодня мы рассмотрим небольшой пример использования шаблонизатора Twig.
Содержание
- 0.1 Особенности Twig
- 0.2 Установка
- 0.3 Структура проекта
- 0.4 Подключение и базовая конфигурация Twig-a
- 0.5 Данные
- 0.6 Загрузка файла и передача данных
- 0.7 index.php
- 0.8 Настройка базового шаблона
- 0.9 Настройка шаблона вывода книг
- 1 Серия романов о Гарри Поттере
- 2 Twig для дизайнеров шаблонов
- 3 My Webpage
- 4 Members
- 5 Twig наследование шаблонов
- 6 Дружим Битрикс и Twig
- 7 Твиг для разработчиков шаблонов | Документация по Twig – PHP шаблонизатору
Особенности 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/