Al tratar con una matriz renderizable en PHP, puedo usar Element :: children () para acceder a los elementos que no son #
propiedades sino elementos renderizables subordinados (elementos de formulario dentro de un conjunto de campos, elementos dentro de un widget de campo, etc.). Por ejemplo, este fragmento de file.module:
<?php
if ($element['#multiple']) {
foreach (Element::children($element) as $name) {
// ...
}
}
?>
¿Cómo puedo hacer lo mismo en una plantilla Twig? Si lo hago {% for child in element %}
, incluirá también #type
, #cache
etc.
Respuestas:
fuente
He creado un filtro Twig que vuelve con los hijos como un
ArrayIterator
.mymodule/mymodule.services.yml
mymodule/src/TwigExtension/Children.php
en la plantilla Twig:
fuente
Utilice el módulo Twig Tweak , que, entre otras características maravillosas, tiene un filtro "secundario":
fuente
Aquí hay una modificación de /drupal//a/236408/67965 que recorre los elementos secundarios de representación en lugar del campo
#items
.La extensión de la ramita:
En Twig, puede pasar directamente a los niños renderizados, lo que ayuda en los patrones de diseño atómico. Defina una plantilla de entidad, por ejemplo:
donde grid.html.twig es algo así como:
Esto suele ser más útil que tener que representar una plantilla de campo
{{ content.field_collection_items }}
porque el diseño de los elementos secundarios puede controlarse en el contexto del elemento de diseño principal.fuente