Kiedy mamy do czynienia z tablicą renderowalną w PHP, mogę użyć Element :: children (), aby uzyskać dostęp do elementów, które nie są #
właściwościami, ale podporządkowanymi elementami do renderowania (elementy formularza w zestawie pól, elementy w widżecie pola itp.). Na przykład ten fragment kodu z pliku.module:
<?php
if ($element['#multiple']) {
foreach (Element::children($element) as $name) {
// ...
}
}
?>
Jak mogę zrobić to samo w szablonie Twig? Jeśli to zrobię {% for child in element %}
, będzie on zawierał również #type
, #cache
etc.
Odpowiedzi:
źródło
Stworzyłem filtr Twig, który powraca z dziećmi jako
ArrayIterator
.mymodule/mymodule.services.yml
mymodule/src/TwigExtension/Children.php
w szablonie Twig:
źródło
Użyj modułu Twig Tweak , który oprócz innych wspaniałych funkcji ma filtr „dzieci”:
źródło
Oto modyfikacja https://drupal.stackexchange.com/a/236408/67965, która zapętla się przez dzieci renderowane zamiast pola
#items
.Przedłużenie gałązki:
W gałązce możesz następnie przejść bezpośrednio przez renderowane dzieci, co pomaga w atomowych wzorach projektowych. Zdefiniuj szablon encji, na przykład:
gdzie grid.html.twig jest coś takiego:
Jest to zwykle bardziej przydatne niż konieczność renderowania szablonu pola,
{{ content.field_collection_items }}
ponieważ układ elementów potomnych może być kontrolowany w kontekście nadrzędnego elementu projektu.źródło