Wenn ich mich mit einem renderbaren Array in PHP befasse, kann ich mit Element :: children () auf die Elemente zugreifen, die keine #
Eigenschaften, sondern untergeordnete renderbare Elemente sind (Formularelemente innerhalb eines Feldsatzes, Elemente innerhalb eines Feld-Widgets usw.). Zum Beispiel dieses Snippet aus file.module:
<?php
if ($element['#multiple']) {
foreach (Element::children($element) as $name) {
// ...
}
}
?>
Wie kann ich dasselbe in einer Twig-Vorlage tun? Wenn ich das tue {% for child in element %}
, wird es auch #type
, #cache
usw.
Antworten:
quelle
Ich habe einen Zweigfilter erstellt, der mit den Kindern als zurückkehrt
ArrayIterator
.mymodule/mymodule.services.yml
mymodule/src/TwigExtension/Children.php
in der Zweigvorlage:
quelle
Verwenden Sie das Twig Tweak- Modul, das unter anderem über einen "Kinder" -Filter verfügt:
quelle
Hier ist eine Modifikation von /drupal//a/236408/67965 , die anstelle des Felds die untergeordneten Renderprogramme durchläuft
#items
.Die Zweigverlängerung:
In twig können Sie dann gerenderte Kinder direkt durchlaufen, was bei atomaren Entwurfsmustern hilfreich ist. Definieren Sie eine Entitätsvorlage, zum Beispiel:
Dabei ist grid.html.twig so etwas wie:
Dies ist normalerweise nützlicher als das Rendern einer Feldvorlage,
{{ content.field_collection_items }}
da das Layout der untergeordneten Elemente möglicherweise im Kontext des übergeordneten Entwurfselements gesteuert wird.quelle