Ao lidar com uma matriz renderizável no PHP, posso usar Element :: children () para acessar os elementos que não são #
propriedades, mas elementos renderizáveis subordinados (itens de formulário dentro de um conjunto de campos, itens dentro de um widget de campo, etc.). Por exemplo, este trecho de file.module:
<?php
if ($element['#multiple']) {
foreach (Element::children($element) as $name) {
// ...
}
}
?>
Como posso fazer o mesmo em um modelo Twig? Se eu fizer {% for child in element %}
, ele irá incluir também #type
, #cache
etc.
Respostas:
fonte
Eu criei um filtro Twig que retorna com os filhos como um
ArrayIterator
.mymodule/mymodule.services.yml
mymodule/src/TwigExtension/Children.php
no modelo Twig:
fonte
Use o módulo Twig Tweak , que, entre outros recursos maravilhosos, possui um filtro "infantil":
fonte
Aqui está uma modificação de /drupal//a/236408/67965 que circula pelos filhos de renderização em vez do campo
#items
.A extensão do galho:
No twig, você pode passar diretamente pelos filhos renderizados, o que ajuda nos padrões de design atômico. Defina um modelo de entidade, por exemplo:
onde grid.html.twig é algo como:
Isso geralmente é mais útil do que ter que renderizar um modelo de campo
{{ content.field_collection_items }}
porque o layout dos filhos pode ser controlado no contexto do elemento de design pai.fonte