Категория: Руководства
Twig-шаблоны используются для подготовки шаблонов печатных форм, писем, SMS и оповещений. Представляют из себя html-верстку с вкраплениями twig-разметки, поэтому для создания шаблонов необходимы базовые знания html и twig. В системе, как правило, есть ряд заранее подготовленных шаблонов, которые вы можете брать за основу.
В twig есть следующие основные конструкции языка:
Внутри функциональных блоков используются теги языка в виде <% tag %>. <% endtag %>.
В официальной документации twig дана более полная информация по работе с шаблонизатором.
Ниже даны справочники по twig-фильтрам, twig-функциям, а также объектам, доступным в шаблонах системы.
Справочник доступных twig-фильтровФильтры можно применять к переменным через вертикальную черту. Примеры использования фильтров:
В шаблонах доступна большая часть стандартных фильтров. а также некоторые специальные фильтры. Общий перечень доступных фильтров приведен ниже.
Справочник доступных twig-функцийПример использования функции range.
Аналогично фильтрам в шаблонах доступна большая часть стандартных функций. а также некоторые специальные функции. Общий перечень доступных функций приведен ниже.
Справочник доступных полей и методов объектовВ шаблон в зависимости от его типа передается определенный набор объектов. Из объектов можно извлекать и выводить данные, обращаясь к полям и методам объектов.
Объекты связаны между собой через поля, т.е. обращаясь к полю одного объекта, можно получить другой объект. В таких случаях описание поля в справочнике является ссылкой на объект, который возвращается при обращении к полю.
Отмена генерации twig-шаблонаМогут возникать ситуации, когда требуется отменить генерацию шаблона. Например, мы на триггере хотим отправлять письмо с товарными рекомендациями, но, если никаких рекомендаций для клиента не найдено, то генерацию шаблона письма и его отправку производить не надо. Для отмены следует использовать тег <% cancel %>.
Если срабатывает <% cancel %>. то в журнале действий это будет зафиксировано:
В теге также можно указать сообщение, которое будет зафиксировано в журнале действий.
Пример использования с указанием сообщения:
В журнале действий в этом случае будет следующее:
В случае отмены генерации шаблона письма, SMS или печатной формы, которые генерируются вручную, пользователю будет выведено сообщение, указанное в теге <% cancel %>.
Часто возникающие проблемы 1. Как вывести в шаблоне значение пользовательского поля заказаДля вывода данных из пользовательского поля используйте метод getCustomField. Пример:
В примере some_code — символьный код пользовательского поля.
2. Ошибка при попытке вывести поле заказа, содержащее датуРечь о проблеме в случае, когда вы видите следующее сообщение об ошибке:
Дело в том, что при выводе в twig-шаблоне полей заказа (или клиента), которые содержат дату, требуется применять фильтр date. чтобы указать формат вывода даты.
3. Как вывести текущую датуДля вывода текущей даты используйте фильтр date следующим образом:
Есть сайт на symfony, который использует twig шаблонизатор. Внутри twiga нельзя писать пхп код, а это очень нужно. Заменить его теми функциями что есть в twig нельзя. Ведь это не что-то нестандартное, должен быть простой способ выполнить пхп и выдать результат в шаблон. Есть:
возможно тут что-то надо изменить?
Что в PHP: Там находится класс, который берёт имя домена и урл и отправляет посредством fsockopen() на удалённый сервер. Думаю, твигом такое сделать нельзя.
UPD: Хочу сделать для этого сервис.
В файле /Resources/config/services.yml :
rsr.sendurl мой добавленный сервис.
По пути Site\RsrSecurityBundle\Service\RsrNwlSystem.php находится мой класс. Как тут указать ключ сервиса, чтобы им воспользоваться в классе вывода основного контента на страницу.
задан 4 июн '15 в 7:26
Создайте новый фильтр, функцию или тег (в зависимости от ваших требований). В Twig это достойно описано в документации
Учитывая изменения в вопросе, поясню. Вы можете создать дополнительный фильтр (назову его urlsend ) и вызывать его в шаблоне для нужных переменных, например
Сам фильтр - это любая функция (или метод), которая получает одно значение на вход и выдает результат "фильтрации". Подключается это очень просто (например ваш фильтр это функция sendURL() :
ответ дан 4 июн '15 в 7:41
Я не совсем понял в документации в каком файле создаются пользовательские фильтры. И почему фильтр а не функцию? По-моему фильтр должен что-то фильтровать или в твиге не обязательно? – Raftko 4 июн '15 в 8:23
Это может быть в любом файле, откуда доступен экземпляр шаблонизатора. Вы можете ничего не фильтровать, просто вернуть то же значение, но перед эти выполнить необходимые вам действия. – tutankhamun 4 июн '15 в 8:26
В этой статье рассмотрим Twig теги - конструкции шаблонизатора, которые выполняют разнообразные задачи, такие как: условные операторы, циклы, экранирование данных, создание макросов, использование наследования шаблонов, запись в переменные и многое другое. В общем виде они записываются с помощью открывающего тега и закрывающего (именуется префиксом end). Закрывающий тег нужен не для всех конструкций. Пример абстрактного тега выглядит так:
Управляющие конструкции: условные операторы и циклыТег if в Twig сравним с условным оператором if в PHP. В простейшей форме вы можете использовать его, чтобы проверить выражение на истинность:
Вы также можете проверить массив или строку на существование:
Twig шаблонизатор предполагает дополнительные проверки в условиях:
empty - проверяет, является ли переменная пустой:
even и odd - возвращает true если данное число является четным или нечетным, соответственно:
iterable - проверяет, является ли переменная массивом или объектом (экземпляром класса, имплементирующего интерфейс Traversable):
null - возвращает true, если переменная равна NULL :
constant - проверяет, имеет ли переменная точно такое же значение, как константа. Вы можете использовать либо глобальные константы, либо константы класса:
divisible - проверяет, делится ли переменная на число:
same as - проверяет, указывают ли две переменные на одну ячейку памяти. Аналогичен оператору эквивалентности === в php:
defined - проверяет, определена ли переменная:
В условиях можно использовать логические операторы and, or, not:
В условиях имеется возможность использовать регулярные выражения
Можно также проверить, начинается ли или заканчивается строка с определенного символа:
Также вы можете использовать более сложные выражения if-elseif (кстати switch-case в Twig отсутствует ):
Тег for аналогичен конструкции for в php и осуществляет "перебор" элементов массива или свойств объекта, если объект является экземпляром класса, имплементирующего Traversable интерфейс.
В качестве примера рассмотрим шаблон поля и в нем перебор множественных значений поля:
Переменные, доступные внутри цикла:
В отличие от PHP нельзя прервать или продолжить цикл (continue и break). Однако можно создавать правила, позволяющие пропускать элементы по условиям for-if. В примере ниже неактивные пользователи пропускаются в итерациях:
Также в Twig возможна конструкция for-else для выполнения действий, если массив или объект оказался пустым:
В Twig также возможны итерации с перебором и ключей, и значений
Наследование шаблонов в TwigНаследование шаблонов - одна из самых интересных особенностей в Twig. Наследование позволяет создавать базовые родительские шаблоны, которые потом можно будет использовать в дочерних шаблонах, при этом весь код родительских шаблонов доступен и в дочерних, а кроме того есть возможность переопределять некоторые блоки родительских шаблонов. Рассмотрим теги, которые позволяют реализовать наследование:
Тег extends¶Рассмотрим использование наследования и тега extends на примере шаблона для блока block.html.twig и его дочерних шаблонов. Базовый родительский шаблон блока содержит код в упрощенном виде:
В шаблоне прописан код, который будет выводиться и в дочерних шаблонах. Содержимое шаблона, которое доступно для переопределения в дочерних шаблонах находится внутри тегов block. У каждой секции block имеется свое имя, которое будет использовано при переопределении. В данном примере есть только один блок с именем content. Весь код вне тегов block будет выведен как есть и его переопределить уже нельзя. Если в дочернем шаблоне вывод блока не будет переопределен, то код блока будет взят из базового шаблона. В качестве дочернего шаблона рассмотрим шаблон для блока с вкладками (в Drupal 8 они вынесены в отдельный блок) block--local-tasks-block.html.twig:
Наследовать шаблоны можно также из модулей и других тем:
При переопределении блока родительского шаблона, содержимое из родительского блока перезаписывается, но если в блоке нужно выводить содержимое родительского блока, то используется Twig функция parent()
Тег block¶Блоки используются для реализации механизма наследования в качестве заполнителей как в родительском шаблоне, так и в дочерних (подробнее в разделе тега extends ). Имена блоков должны состоять из цифр, букв и символов подчеркивания. Использование тире не допускается.
Макросы в TwigМакросы можно сравнить с функциями в языках программирования. Они нужны для многократного использования часто используемых частей html кода и при этом макросы могут принимать параметры, что позволяет динамически изменять вставляемый код. Статический же блок с html кодом можно сохранить с помощью тега set. Макросы отличаются от php функций следующими особенностями:
Как и php функции макросы не имеют доступа к глобальным переменным шаблона. Для передачи переменных из шаблона при необходимости нужно использовать специальная переменную _context.
Тег macro¶Тег macro определяет новый макрос. В качестве простейшего примера рассмотрим макрос, который рендерит элемент формы input, при этом input type, name, value, size макрос содержит в качестве параметров (type и size задаются по умолчанию):
Далее макрос может быть использован в любом шаблоне. Но перед использованием его нужно будет импортировать с помощью тега import:
Если макрос определен и используется в одном и том же шаблоне, то для его импорта используется специальная переменная _self.
Если нужно использовать макрос в другом макросе, но в том же самом шаблоне, то макрос импортируется локально внутри другого макроса:
В Drupal 8 в шаблоне menu.html.twig макрос menu_links() определяется и используется в одном и том же шаблоне и дополнительно сам макрос используется рекурсивно внутри самого себя для вывода вложенных пунктов меню:
Тег import¶Тег import импортирует все макросы из указанного шаблона:
Тег from импортирует только указанные макросы из шаблона:
Тег include¶Тег include включает в себя имя шаблона и возвращает отображаемое содержимое этого файла в текущий шаблон. Все переменные текущего шаблона будут доступны в подключаемых шаблонах. С помощью include можно некоторые блоки кода вынести в отдельные шаблоны:
Можно добавить дополнительные переменные, передавая их после with:
Или можно отключить доступ к контексту путем добавления only.
Вы можете отменить include при помощи инструкции ignore missing, и тогда Twig будет игнорировать подключение несуществующего шаблона. Размещается инструкция ignore missing сразу за именем шаблона:
Можно предоставить и список шаблонов, которые проверяются на предмет существования до включения.
Пример использования include в Drupal 8 можно посмотреть в шаблоне темы Classy links--node.html.twig:
Внутри шаблонов можно создавать переменные с помощью тега set:
С помощью тега set в переменную можно записать блок кода:
Тег spaceless¶Тег spaceless можно использовать для удаления пробелов между HTML-тегами, а также содержимого внутри HTML-тегов или пробелов в простом тексте:
Тег autoescape¶В зависимости от того, включено или нет автоматическое экранирование, вы можете отметить фрагмент шаблона для экранирования или же отключить эту функцию, используя тег autoescape (в Drupal 8 автоэкранирование включено в контексте html):
Тег verbatim¶Тег verbatim маркирует секцию и сообщает шаблонизатору не обрабатывать содержимое блока:
Тег filter¶Тег filter позволяет применять стандартные фильтры шаблонизатора Twig для блоков данных шаблонов. Просто разместите код внутри секции "filter":
Можно также создавать комбинации фильтров:
Если в теге используется фильтры escape или e, то drupal их заменит на свой фильтр drupal_escape .
Тег do работает так же, как стандартное выражение с переменной << var >>. с той разницей, что ничего не выводится. На практике применим, если нужно вызвать функцию или метод объекта, которые что либо могут возвращать или выводить, но в выводе шаблона эти данные не нужны отображать.
Тег trans¶Тег trans специфичен для Drupal 8. Этот тег позволяет переводить текст (используя токены) внутри тега используя функцию t() или TranslationManager::formatPlural(). если внутри тега использована конструкция <% plural. %> :
С фильтром t перевод той же самой строки выглядел бы так:
По умолчанию все токены передаются в t() или TranslationManager::formatPlural() с префиксом @ для экранирования. Для использования префикса % нужно модифицировать токен-переменную с помощью фильтра placeholder:
Для использования разных форм для множественного числа существительных используйте конструкцию <% plural. %> внутри тега trans:
Для использования перевода для множественных чисел существительных в административном интерфейсе сайта на странице /admin/config/regional/translate нужно указать переводы для единственного числа и для двух форм множественного:
В функции t() и методе TranslationManager::formatPlural() имеется параметр $options, с помощью которого передается дополнительный контекст или язык для перевода (подробнее в документации t() ). Для использования этих опций в теге trans, используйте синтаксис with <. > в открывающемся теге trans:
Строку для перевода можно также задавать аргументом прямо в открывающемся теге trans:
Хотите быстро изучить JavaScript и jQuery?
Предлагаю использовать самый эффективный и современный метод обучения - видеокурс .
За счет получения информации сразу по двум каналам (зрение и слух) эффективность обучения значительно превосходит обучение по книгам. А домашние задания и онлайн-тесты позволят вам постоянно думать на изучаемом языке и сразу проверять свои знания!
Более 100 видеоуроков на одном DVD.
Видеокурс "HTML с нуля"
Если вы давно хотите как следует изучить HTML, то у меня для Вас есть отличная новость!
Вы можете совершенно бесплатно получить полноценный курс по HTML из моего платного сборника. 33 видеоурока от Евгения Попова!
Видеокурс "CSS с нуля"
Если вы уже изучили HTML и хотите двигаться дальше, то следующим шагом будет изучение технологии CSS.
Так же, как и в случае с HTML, вы можете совершенно бесплатно получить полноценный курс по СSS из моего платного сборника. Вас ждет 45 подробных видеоуроков от Евгения Попова!
Видеокурс "Домен и хостинг"
Если вы хотите разобраться с понятиями домена и хостинга, научиться создавать базы данных, закачивать файлы сайта на сервер по FTP, создавать поддомены, настраивать почтовые ящики для своего сайта и следить за его посещаемостью, то этот курс создан специально для вас!
Получать новые уроки на E-mail:При разработке веб-приложений и проектировании структуры будущего скрипта очень хорошей практикой является отделение логики от его дизайна. Таким образом, отображением данных занимается шаблон, а получением или формированием данных, соответственно, логическая часть. При этом удобно править каждую часть в отдельности, и код скрипта становится более удобочитаемым и понятным.
Однако если для отображения данных используются шаблоны, то возникает вопрос, как подгружать нужные шаблоны и как передавать данные в шаблон. Для этих целей применяются шаблонизаторы, которые можно как написать самостоятельно, так и воспользоваться уже готовым решением.
В данном цикле Премиум уроков мы с Вами будем изучать один из наиболее удобных шаблонизаторов – шаблонизатор Twig.
Изучив курс по шаблонизатору Twig. Вы научитесь использовать шаблонизатор Twig, для создания шаблонов Вашего сайта, а так же узнаете, как манипулировать данными и формировать логические условия в шаблонах.
Русское руководство по шаблонизатору Twig. Научись сортировать элементы с помощью шаблонизатора Twig.
Все уроки курса:Количество уроков: 6
Продолжительность курса: 04:44:38
Автор: Виктор ГавриленкоМеня зовут Виктор Гавриленко. Еще учась в институте, начал увлекаться компьютерными технологиями и программированием, на протяжении многих лет усиленно занимаюсь разработкой интернет сайтов и веб-программированием.
Описание курса: В данном цикле Премиум уроков мы с Вами будем изучать один из наиболее удобных шаблонизаторов – шаблонизатор Twig. Изучив курс по шаблонизатору Twig, Вы научитесь использовать шаблонизатор Twig, для создания шаблонов Вашего сайта, а так же узнаете, как манипулировать данными и формировать логические условия в шаблонах.
Категории премиумВсе права защищены © 2015
ИП Рог Виктор Михайлович
ОГРН: 313774621200541
Служба поддержки