logo

Extra Block Types (EBT) - Nueva experiencia con Layout Builder❗

Extra Block Types (EBT): tipos de bloques con estilo y personalizables: Presentaciones de diapositivas, Pestañas, Tarjetas, Acordeones y muchos más. Configuraciones integradas para fondo, DOM Box y plugins de JavaScript. Experimenta hoy el futuro de la construcción de diseños.

Módulos de demostración EBT Descargar módulos EBT

❗Extra Paragraph Types (EPT) - Nueva experiencia con Paragraphs

Extra Paragraph Types (EPT): conjunto de módulos basado en párrafos de forma análoga.

Módulos de demostración EPT Descargar módulos EPT

Scroll
19/06/2025, by Ivan

Menu

Desde la documentación oficial de Twig: «Los macros son comparables a las funciones en los lenguajes de programación tradicionales. Son útiles para colocar idioms HTML usados frecuentemente en elementos reutilizables, para evitar la repetición».

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

Los macros se diferencian de las funciones nativas de PHP en varios aspectos:

  • Los valores predeterminados de los argumentos se definen mediante el filtro default dentro del cuerpo del macro;
  • Los argumentos de un macro siempre son opcionales.
  • Si se pasan argumentos posicionales adicionales al macro, estos se almacenan en una variable especial varargs como una lista de valores.

Pero, al igual que en las funciones PHP, los macros no tienen acceso a las variables actuales del template. Puedes pasar todo el contexto como argumento usando la variable especial _context.

Llamando al macro

Desde _self

El macro puede estar ubicado en el mismo Twig desde donde se llama. En ese caso, se usa el contexto _self ...

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

Desde un archivo externo

Sin embargo, se recomienda colocar los macros en un archivo separado (por ejemplo, macros.twig), para que los macros puedan usarse en múltiples plantillas.

Por ejemplo, en el tema personalizado «mytheme» colocamos aquí el archivo de macros ...

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

Nota: el archivo de macros puede llamarse any.twig, pero no puede tener extensión html (es decir, macros.html.twig no funcionará). Además, el archivo debe ubicarse en el directorio «templates» sin importar dónde se use (es decir, para diseños de Layout Builder que coloques en ... /mytheme/layouts, el macro debe existir en ../mytheme/templates).

En la plantilla donde quieres usar el macro, añade esta declaración de importación.

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

@mytheme localiza mágicamente el directorio «templates» de tu tema, pero debes especificar cualquier estructura adicional de carpetas en la declaración de importación, por ejemplo:

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

Ten en cuenta que en versiones anteriores de esta documentación se decía que no era necesario definir estructuras de carpetas anidadas, así que tu experiencia puede variar. Si haces esto en un módulo personalizado, usa la misma técnica pero con el nombre del módulo en lugar del nombre del tema (por ejemplo, @mycustommodule).

Luego usa el macro ...

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

Ejemplos

En Drupal 8, un macro se usa para crear, por ejemplo, la navegación principal (ver el archivo 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.