Перейти к содержимому

Как закомментировать строку в twig

  • автор:

Начните разработку WordPress с помощью Twig: блоки и вложение

В предыдущей статье я писал об интеграции движка шаблонов Twig с WordPress через Timber и о том, как разработчики могут отправлять данные из файлов PHP в файлы Twig. Давайте поговорим о том, как создать базовый шаблон с помощью Twig, о преимуществах этой технологии DRY и о WordPress Cheatsheet Timber-Twig.

Создание базового шаблона в Twig

Twig работает по принципу СУХОЙ (не повторяйся). Одна из наиболее важных особенностей Twig – базовые шаблоны с вложенностью и множественным наследованием . Хотя большинство людей использует PHP линейно, вы можете создавать бесконечные уровни вложенных блоков, чтобы особенно контролировать свои шаблоны страниц.

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

Давайте рассмотрим пример родительского или базового шаблона, файл base.twig . Вы можете поместить его с другими шаблонами Twig в папку представлений. Вы вызываете этот файл в любом из ваших шаблонов Twig, где он используется в качестве родительского шаблона для этого конкретного файла Twig. Введите следующие строки кода, чтобы создать папку представлений. Этот базовый шаблон предоставит базовую структуру для вашей темы WordPress. Вот код простого файла base.twig .

Twig для верстальщиков#

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

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

Рассмотрим небольшой пример шаблона, в котором показаны некоторые основы создания шаблонов:

 html> head> title>Мой сайтtitle> head> body> ul id="navigation">  for item in navigation %> li>a href=" <item.href >>"> <item.caption >>a>li>  endfor %> ul> h1>Моя статьяh1>  <a_variable >> body> html> 

Есть два вида разделителей и > . Первый используется для выполнения выражений, например, циклов, второй — для вывода результата выражения в шаблоне.

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

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

  • Textmate via the Twig bundle
  • Vim via the Jinja syntax plugin or the vim-twig plugin
  • Netbeans via the Twig syntax plugin (until 7.1, native as of 7.2)
  • PhpStorm (native as of 2.1)
  • Eclipse via the Twig plugin
  • Sublime Text via the Twig bundle
  • GtkSourceView via the Twig language definition (used by gedit and other projects)
  • Coda and SubEthaEdit via the Twig syntax mode
  • Coda 2 via the other Twig syntax mode
  • Komodo and Komodo Edit via the Twig highlight/syntax check mode
  • Notepad++ via the Notepad++ Twig Highlighter
  • Emacs via web-mode.el
  • Atom via the PHP-twig for atom
  • Visual Studio Code via the Twig pack

Also, TwigFiddle is an online service that allows you to execute Twig templates from a browser; it supports all versions of Twig.

Переменные#

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

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

 foo.bar >>  foo['bar'] >> 

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

Реализация

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

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

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

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

  attribute(foo, 'data-foo') >> 

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

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

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

Переменные#

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

 set foo = 'foo' %>  set foo = [1, 2] %>  set foo = 'foo': 'bar'> %> 

Фильтры#

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

Следующий пример удаляет все HTML-теги из name и преобразует в верхний регистр первый символ каждого слова:

 name|striptags|title >> 

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

 list|join(', ') >> 

Чтобы применить фильтр к блоку кода — оберните его тегом apply :

 filter upper %> Этот текст будет в верхнем регистре  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') >>  data|convert_encoding(from='iso-2022-jp', to='UTF-8') >> 

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

  "now"|date(null, "Europe/Paris") >>  "now"|date(timezone="Europe/Paris") >> 

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

 "now"|date('d/m/Y H:i', timezone="Europe/Paris") >> 

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

Управляющие конструкции#

К управляющим конструкциям относится все условные операторы (такие как if / elseif / else ), for — циклы, а также блоки. Управляющие конструкции находятся внутри«« блоков.

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

h1>Пользователиh1> ul>  for user in users %> li> <user.username|e >>li>  endfor %> ul> 

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

 if users|length > 0 %> ul>  for user in users %> li> <user.username|e >>li>  endfor %> ul>  endif %> 

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

Комментарии#

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

Подключение шаблонов#

Тег include используется для подключения одного шаблона в другой.

 include('sidebar.html') >> 

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

 for box in boxes %>  include('render_box.html') >>  endfor %> 

Подключенный шаблон render_box.html имеет доступ к переменной box .

Название файла с шаблоном определяется в загрузчике шаблона. Например, \Twig\Loader\FilesystemLoader позволяет получить доступ к другим шаблонам по названию файла. Вы можете получить доступ к шаблонам в подкаталогах, используя слэш / :

 include('sections/articles/sidebar.html') >> 

Такое поведение зависит от применения вложения Twig.

Наследование шаблонов#

Самая мощная часть Twig — это наследование шаблонов. Наследование шаблонов позволяет вам создать основной «скелет» шаблона, который содержит все элементы вашего сайта и определить теги blocks, которые будут перезаписаны в дочерних шаблонах.

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

Давайте создадим основной шаблон, base.html , который определит простой «скелет» HTML-документа, который можно использовать для простой страницы с двумя колонками:

 html> head>  block head %> link rel="stylesheet" href="style.css" /> title> block title %> endblock %> - Мой сайтtitle>  endblock %> head> body> div id="content"> block content %> endblock %>div> div id="footer">  block footer %> © Copyright 2011 by a href="http://domain.invalid/">youa>.  endblock %> div> body> html> 

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

Дочерний шаблон может выглядеть следующим образом:

 extends "base.html" %>  block title %>Главная endblock %>  block head %>  parent() >> style type="text/css"> .important  color: #336699; > style>  endblock %>  block content %> h1>Главнаяh1> p class="important"> Приветствую на своем потрясном сайте! p>  endblock %> 

Тег extends ключевой здесь. Он сообщает шаблонизатору, что этот шаблон «расширяет» другой шаблон. Когда шаблонизатор обрабатывает шаблон, он первым делом смотрит на родительский шаблон. Тег «extends« должен быть первым в шаблоне.

Обратите внимание, что так как в дочернем шаблоне не определен блок footer , то он берется из родительского.

Используя функцию parent , можно отобразить содержание родительского блока. Она возвращает первоначальное содержание родительского блока:

 block sidebar %> h3>Оглавлениеh3> .  <parent() >>  endblock %> 

Страница документации extends описывает более продвинутые функции, такие как вложенности блоков, область применения, динамическое и условное наследование.

Twig также поддерживает множественное наследование с использованием тега use .

Экранирование HTML#

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

По умолчанию в Twig автоматическое экранирование переменных включено.

Стратегию автоматического экранирования можно настроить с помощью autoescape и по умолчанию — « html«.

Работа с ручным экранированием#

Если ручное экранирование включено, ответственность за безопасность переменных лежит на вас. Что экранировать? Любую переменную, которой вы не доверяете.

Экранирование осуществляется с помощью фильтра escape или e :

 user.username|e >> 

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

 user.username|e('js') >>  user.username|e('css') >>  user.username|e('url') >>  user.username|e('html_attr') >> 

Работа с автоматическим экранированием#

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

 autoescape %> В этом блоке все будет автоматически экранировано (с помощью HTML режима)  endautoescape %> 

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

 autoescape 'js' %> В этом блоке все будет автоматически экранировано (с помощью JavaScript режима)  endautoescape %> 

Экранирование#

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

Для больших блоков нужно использовать тег verbatim .

Макросы#

Макросы сопоставимы с функциями в обычных языках программирования. Они полезны, когда нужно повторить многократно HTML-код, но не копировать его. Макрос определяется тегом macro .

Операторы#

Twig позволяет использовать операторы везде.

Приоритет операторов, сначала идут операторы с наименьшим приоритетом: ?: (ternary operator), b-and , b-xor , b-or , or , and , == , != , , < , >, >= ,
set greeting = ‘Hello ‘ %> set name = ‘Fabien’ %> greeting ~ name|lower >> (greeting ~ name)|lower >>

Литералы#

Самая простая форма выражений — литералы. Литералы соответствуют типам данных PHP: строки, числа и массивы. Существуют следующие литералы:

  • «Привет мир» : Все заключенное в одинарные или двойные кавычки является строками. Это полезно, когда нужно использовать строки в шаблоне (например, в качестве аргументов для вызова функций, фильтров или просто, чтобы расширить или подключить шаблон). Строка может содержать разделитель, который нужно экранировать обратным слэшем ( \ ) – как в примере ‘It\’s good’ . Если строка содержит обратную косую черту (напр., ‘c:\Program Files’ ) убрать черту можно удвоив её (напр., ‘c:\\Program Files’ ).
  • 42 / 42.23 : Целые числа и числа с плавающей точкой записываются так как есть. Если есть точка — это float, иначе — integer.
  • [«foo», «bar»] : Массивы определяются как набор данных разделенных запятыми ( , ) и заключенных в квадратные скобки ( [] ).
  • : Хеши определяются списком ключей и значений разделенными запятой ( , ) и заключены в фигурные скобки ( <> ).

set foo = ‘foo’ %>

Массивы и хеши могут быть вложены друг в друга:

 set foo = [1, "foo": "bar">] %> 

Использование двойных или одинарных кавычек не влияет на производительность, но интерполяция строк (подстановка переменных) поддерживается только в двойных кавычках.

Математические операторы#

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

  • + : Складывает два объекта вместе (операнды приводятся к числами). > выведет 2 .
  • — : Вычитает из первого аргумента второй. > выведет 1 .
  • / : Деление чисел. Возвращает число с плавающей точкой. > равнозначно > .
  • % : Вычисляет целый остаток от деления. > выведет 4 .
  • // : Делит два числа и возвращает результат целое число. > выведет 2 , > is -3 (это просто синтаксический сахар для round фильтра).
  • * :Умножение. > вернет 4 .
  • ** : Возводит левый аргумент в степень правого аргумента > вернет 8 .

Логические операторы#

Вы можете сочетать выражения используя следующие операторы:

  • and : Возвращает true , если левое и правое значение являются true .
  • or : Возвращает true , если левое или правое значение являются true .
  • not : Противоположное значение.
  • (expr) : Группа выражений.

Twig также поддерживает битовые операторы: ( b-and , b-xor , and b-or ).

Операторы чувствительны к регистру.

Операторы сравнения#

Следующие операторы сравнения поддерживаются в любом выражении: == , != , < , >, >= , and

Вы также можете проверить, если строка начинается starts with или заканчивается ends with другой строкой:

 if 'Fabien' starts with 'F' %>  endif %>  if 'Fabien' ends with 'n' %>  endif %> 

For complex string comparisons, the matches operator allows you to use regular expressions:

 if phone matches '/^[\\d\\.]+$/' %>  endif %> 

Оператор содержания#

Оператор in осуществляет проверку на совпадение.

Возвращает true , если левое значение содержится в правом:

  1 in [1, 2, 3] >>  'cd' in 'abcde' >> 

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

Для отрицания используйте оператор not in :

 if 1 not in [1, 2, 3] %>  if not (1 in [1, 2, 3]) %> 

Оператор проверки#

Оператор is выполняет тесты. Тесты можно использовать для проверки переменной на соответствие общему выражению. Правый операнд — это имя теста:

  name is odd >> 

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

 if post.status is constant('Post::PUBLISHED') %> 

Для отрицания используйте оператор, используйте оператор is not :

 if post.status is not constant('Post::PUBLISHED') %>  if not (post.status is constant('Post::PUBLISHED')) %> 

Результаты работы можно посмотреть в тестах tests .

Другие операторы#

Следующие операторы очень полезны, но не попадают ни в одну из других категорий:

  • | : Применяет фильтр.
  • .. : Создает последовательность от левого до правого значения, (это просто синтаксический сахар для функции range ):

 1..5 >>  range(1, 5) >> 

Обратите внимание, что вы должны использовать круглые скобки при объединении его с оператором фильтра из-за :ref: правил приоритета операторов :

(1..5)|join(', ') 
 foo ? 'yes' : 'no' >>  foo ?: 'no' >> is the same as  foo ? foo : 'no' >>  foo ? 'yes' >> is the same as  foo ? 'yes' : '' >> 
  foo ?? 'no' >> 

Подстановка переменных#

Подстановка переменных ( # ) доступна для любого выражения находящегося в строке с двойными скобками. Результатом выражения будет строка:

 "foo # baz" >>  "foo # baz" >> 

Управление пробелами#

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

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

Twig поддерживает два модификатора:

  • Обрезка пробелов с помощью модификатора — : удаляет все пробелы (включая новые строки);
  • Обрезка пробелов в строках с помощью модификатора ~ : удаляет все пробелы (исключая новые строки). Использование этого модификатора справа отключает значение по умолчанию удаление первой новой строки, унаследованной от PHP.

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

В дополнение к модификаторам пробелов, Twig также имеет фильтр spaceless который удаляет пробелы between HTML tags:

 apply spaceless %> div> strong>foo barstrong> div>  endapply %> foo bar
#>

Расширения#

Twig может быть легко расширен. Если вы хотите создать свое собственное расширение, читайте раздел Создание Расширения .

Twig

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

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

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

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

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

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

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

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

  • Textmate с помощью Twig bundle
  • Vim с помощью Jinja syntax plugin или vim-twig plugin
  • Netbeans с помощью Twig syntax plugin (до версии 7.1, нативно , начиная с версии 7.2)
  • PhpStorm (нативно , начиная с версии 2.1)
  • Eclipse с помощью Twig plugin
  • Sublime Text с помощью Twig bundle
  • GtkSourceView с помощью Twig language definition (используется в gedit и других проектах)
  • Coda иSubEthaEdit с помощью Twig syntax mode
  • Coda 2 с помощью other Twig syntax mode
  • Komodo и Komodo Edit с помощью Twig highlight/syntax check mode
  • Notepad++ с помощью Notepad++ Twig Highlighter
  • Emacs с помощью web-mode.el

Переменные

Приложение передает переменные, с которыми вы можете работать в шаблоне. Переменные могут иметь атрибуты или элементы, к которым вы можете иметь доступ. Как выглядит переменная определяется приложением, которое ее предоставило. Вы можете использовать точку (.) чтобы получить доступ к атрибутам переменной (методы или свойства PHP-объекта или элементы PHP- массива), или так называемый индекс ([]):

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

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

Если переменная или атрибут не существует, вы получите значение 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 :

Фильтры

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

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

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

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

 This text becomes uppercase

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

Функции

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

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

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

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

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

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

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

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

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

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

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

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

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

Комментарии

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

Включение других шаблонов

Тэг include используется для включения шаблона и включению использованного контента к текущему:

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

Контекст, который передается во включенный шаблон включает переменные, определенные в шаблоне:

Включенный шаблон render_box.html может получить доступ к box.

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

Это поведение зависит от приложения, в которое встраивается Twig.

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

Наиболее мощное средство Twig это наследование шаблонов. Оно позволяет вам построить базовый «скелет» шаблона,который содержит все общие элементы вашего сайта и определяет блоки, которые дочерние шаблоны могут замещать.

Звучит сложно, но на самом деле все очень просто. Это легко понять с помощью следующего примера.

Давайте определим базовый шаблон, base.html, который определяет простой HTML скелетный документ, который вы можете использовать для простой страницы с двумя колонками:

      - My Webpage   © Copyright 2011 by you.  

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

Шаблон-потомок может выглядеть так:

 Index  > .important  

Index

Тег extends очень важен здесь. Он говорит механизму шаблонов, что этот шаблон «расширяет» другой шаблон. Когда система шаблонов вычисляет этот шаблон, сначала он ищет родителя. Тег extends должен быть первым тегом в шаблоне. Следует заметить, что так как шаблон-ребенок не определяет блок footer , используется значение из родительского шаблона.

Возможно передать содержание родительского шаблона используя функцию parent.

Это дает результаты родительского блока:

 

Table Of Contents

. >

Страница документации для тега extends описывает более сложные особенности , такие как вложенные блоки, области видимости, динамическое наследование и условное наследование.

Twig также поддерживает множественное наследование с так называемым горизонтальным повторным использованием с помощью тега use. Эта сложная особенность вряд ли понадобится в обычных шаблонах.

Экранирование HTML

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

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

Автоматическое сохранение поддерживается только если расширение escaper включено (что так и есть по умолчанию).

Работа с экранированием вручную

Если сохранение вручную включено, это ваша обязанность сохранить все переменные если это нужно. Что нужно сохранить? Все переменные, которым вы не доверяете.

Сохранение работает , если пропустить переменную через escape или e фильтр:

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

Автоматическое экранирование

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

 Everything will be automatically escaped in this block (using the HTML strategy)

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

 Everything will be automatically escaped in this block (using the JS strategy)
Экранирование

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

Самым простым способом для вывода переменной разделитель

Макросы

поддержка значений аргументов была добавлена по умолчанию в Twig 1.12.

Макросы сравнимы с функциями в обычных языках программирования. Они полезны для повторного использования часто используемых HTML — фрагментов чтобы не повторять себя. Макрос определяется через macro теги. Вот небольшой пример (впоследствии называемый forms.html) макроса, который представлен в виде элемента формы:

Макрос может быть определен в любом шаблоне, и должен быть «импортирован» через тег import до использования:

Кроме того, вы можете импортировать отдельные имена макросов из шаблона в текущее пространство имен с помощью тега from или дать им имя:

 Username > Password > 

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

Выражения

Twig позволяет выражения везде. Такая работа очень похожа на обычный PHP и даже если вы не работаете с PHP, вы почувствуете себя с ним комфортно.

Литеры

Самой простой формой выражений являются литералы. Литералы представлены для таких типов PHP, как строки, числа и массивы. Существуют следующие литералы:

  • «Hello World» : Все между двумя двойными или одинарными кавычками является строкой. Они полезны, когда вам нужна строка в шаблоне (например, как аргументы функций,фильтры или для того чтобы просто расширить или включить шаблон). Строка может содержать разделитель, если ему предшествует обратный слеш () — как в ‘It’s good’
  • 42 / 42,23 : Целые числа и числа с плавающей точкой создаются написанием чисел . Если точка есть в числе то это float, в противном случае integer.
  • [«foo», «bar»] : Массивы определяются последовательностью выражений, разделенных запятыми (,) и окруженных квадратными скобками ([]).
  • : Хэши определяется списком ключей и значений, разделенных запятыми (,) и взятых в фигурные скобки (<>):
  • true/false : true представляет истинное значение, false представляет ложное значение.
  • null : null не представляет никакого определенного значения. Это значение возвращается, когда переменной не существует. none является синонимом null.

Массивы и хэши могут быть вложенными:

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

Вычисления

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

  • + : Добавляет два объекта вместе (операнды преобразованы в числа). > равно 2.
  • — : Вычитает второе число из первого. > равно 1.
  • / : Деление двух чисел. Возвращенное значение будет числом с плавающей точкой. > есть 0,5.
  • % : Вычисляет остаток от целочисленного деления. > есть 4.
  • // : Деление двух чисел и возвращает (в виде дроби) целый результат. > = 2 , > является -3
  • * : Умножает левый операнд на правый. > возвратится 4.
  • ** : Генерирует левый операнд в степень правого операнда. > возвратится 8.

Логика

Вы можете объединить несколько выражений со следующими операторами:

  • and : Возвращает истину, если левый и правый операнды оба истинны.
  • or : Возвращает истину, если левый или правый операнд истинны.
  • not : Отрицает выражение.
  • (expr) : Групипровка вырожений.

Twig также поддерживает побитовые операторы (b-and, b-xor, and b-or).

Сравнения

Следующие операторы сравнения поддерживаются в любом выражении: == , != , < , >, >= и

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

Для сложных сравнений строк, оператор matches позволяет вам использовать регулярные вырожения:

Оператор in

Оператор in осуществляет проверку содержания.

Он возвращает true если левый операнд содержится в правом:

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

Чтобы выполнить проверку на то, что левый операнд не содержится в правом, нужно использовать not in оператор.

Операторы проверки

Оператор is выполняет тесты. Тесты могут быть использованы для тестирования переменной в отношении общего выражения. Правый операнд является именем теста:

Тесты также используют аргументы:

Тесты могут быть инвертированы при использовании is not оператора:

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

Другие операторы

Поддержка расширенного тройного оператора была добавлена в Twig 1.12.0.

Следующие операторы очень полезны, но не вписываются ни в какую из категорий:

  • .. : Создает последовательность, основанную на операнде до и после оператора.
  • | : Применяет фильтр.
  • ~ : Преобразует все операнды в строки и объединяет их. Hello ! вернется (при условии, имя является «John») Hello John!.
  • . , [] : Получает атрибут объекта.
  • ? : : Тернарный оператор оператор: >

Строка интерполяции

Строка интерполяции была добавлена в Twig 1.5.

Строка интерполяция (#) позволяет любое допустимое выражение появляться в двойных кавычках. Результатом вычисления является то что вставляется в строку:

 baz" >> baz" >> 

Управление пробелами

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

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

Twig поддерживает два модификатора:

  • Обрезка пробелов с помощью модификатора — : удаляет все пробелы (включая переводы строк);
  • Обрезка пробелов строк с помощью модификатора ~ : Удаляет все пробелы (за исключением новых строк). Использование этого модификатора справа отключает удаление по умолчанию первой новой строки, унаследованной от PHP.

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

В дополнение к модификаторам пробелов, Twig также имеет фильтр spaceless , который удаляет пробелы между тегами HTML:

  
foo bar
foo bar
#>

Метка apply была введена в Twig 2.9; используйте тег filter с предыдущими версиями.

Расширения

Twig может быть легко расширен.

Если вы ищете новые теги, фильтры или функции, посмотрите это в официальном хранилище расширений Twig extension repository.

Если вы хотите создать свой собственный, прочтите главу Creating an Extension.

Странный редирект

Прошу помочь с одной проблемой. У меня сайт интернет-магазин. В шапке сайта логотип. Клик на него перебрасывает на недавно созданную страницу из каталога магазина, а раньше открывалась главная страница сайта. Робот Яндекса определяет эту страницу как условно https://site.ru/, и при каждом переобходе через раз ставит её как «в поиске» и как «редирект». В .htaccess я нашел строки, которые возможно отвечают за этот процесс. Однако попытка их закомментировать приводит к тому, что страница совсем не находится на сервере. В чём тут может быть дело? Я не великий специалист в этой области, поэтому прошу ногами больно не бить)).

BaNru
Пацифизжу

Команда форума
Регистрация 13.11.2010 Сообщения 4 118

htaccess тут не при чём. Ищите файл типа header.php (.tpl, .twig) в папке с темой и там можете исправить.
Либо в настройках магазина это тоже наверняка где-то возможно.

Подробнее можно будет подсказать только узнав что за CMS.
Как понимаю магазин работает на какой-то CMS, типа opencart, magento, woocommerce.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *