Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

Макросы в шаблонах Twig

04/05/2020, by maria

Из официальной документации Twig: «Макросы сравнимы с функциями в обычных языках программирования. Они полезны для размещения часто используемых идиом HTML в элементах многократного использования, чтобы не повторяться».

{% macro input(name, value, type, size) %}
  <input type="{{ type|default('text') }}" name="{{ name }}" value="{{ value|e }}" size="{{ size|default(20) }}" />
{% endmacro %}

Макросы отличаются от нативных функций PHP несколькими способами:

  • Значения аргумента по умолчанию определяются с помощью фильтра default в теле макроса;
  • Аргументы макроса всегда необязательны.
  • Если дополнительные позиционные аргументы передаются макросу, они попадают в специальную переменную varargs в виде списка значений.

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

Вызывая макрос

From _self

Макрос можно поместить в ту же Twig, из которой вы его называете. В этом случае используется контекст _self ...

{{ _self.input(name, value, type, size) }}

Из внешнего файла

Тем не менее, рекомендуется размещать макросы в отдельном файле (например, macros.twig), чтобы макросы можно было использовать в нескольких шаблонах.

Например, в пользовательской теме «mytheme» мы размещаем здесь файл макроса ...

[site_root]/themes/custom/mytheme/templates/macros.twig

Примечание: файл макроса может иметь имя any.twig, но не может иметь расширение html (т.е. macros.html.twig не будет работать). Файл также должен быть помещен в каталог «templates» независимо от того, где он используется (то есть для макетов Layout Builder, которые вы поместили в ... /mytheme/layouts, макрос должен существовать в ../mytheme/templates ).

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

{% import '@mytheme/macros.twig' as myMacros %}

@Mytheme волшебным образом находит каталог «шаблонов» вашей темы, но вы должны определить любую дополнительную структуру каталогов в операторе импорта, например:

{% import '@mytheme/foo/bar/macros.twig' as myMacros %}

Обратите внимание, что в более старых версиях этой документации указывалось, что определение структуры вложенных каталогов не требуется, поэтому ymmv. Если вы делаете это в пользовательском модуле, используйте ту же технику, просто используйте имя модуля вместо имени темы (например, @mycustommodule).

Затем используйте макрос ...

{{ myMacros.input(name, value, type, size) }}

Примеры

В Drupal 8 макрос используется для создания, например. основной навигации (см. файл menu.html.twig).

Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.