При работе с рендерируемым массивом в PHP я могу использовать Element :: children () для доступа к элементам, которые не являются #
свойствами, но подчиненными рендерируемыми элементами (элементы формы внутри набора полей, элементы внутри виджета поля и т. Д.). Например, этот фрагмент из файла file.module:
<?php
if ($element['#multiple']) {
foreach (Element::children($element) as $name) {
// ...
}
}
?>
Как я могу сделать то же самое в шаблоне Twig? Если я это сделаю {% for child in element %}
, это будет включать в себя также #type
и #cache
т. Д.
Ответы:
источник
Я создал фильтр Twig, который возвращается с детьми как
ArrayIterator
.mymodule/mymodule.services.yml
mymodule/src/TwigExtension/Children.php
в шаблоне Twig:
источник
Используйте модуль Twig Tweak , который, помимо других замечательных функций, имеет «детский» фильтр:
источник
Вот модификация https://drupal.stackexchange.com/a/236408/67965, которая перебирает дочерние элементы рендера вместо поля
#items
.Удлинитель веточки:
В ветке вы можете напрямую проходить через отрисованных потомков, что помогает в атомарных шаблонах проектирования. Определите шаблон сущности, например:
где grid.html.twig это что-то вроде:
Это обычно более полезно, чем необходимость отображать шаблон поля,
{{ content.field_collection_items }}
поскольку макет дочерних элементов может управляться в контексте родительского элемента дизайна.источник