Layout-XML in Hyvä: Blocks, Container, getChildNames()-Iteration
Layout-XML in Hyvä: Blocks, Container, getChildNames()-Iteration
~7 Min. Lesezeit Zuletzt aktualisiert am 9. August 2026
Layout-XML ist einer der Bereiche, in denen sich Hyvä am wenigsten von klassischem Magento unterscheidet - <block>, <container>, <referenceBlock> funktionieren exakt wie gewohnt. Der Unterschied liegt darin, wie Templates die Kind-Blocks später ausgeben.
Blocks und Container kurz wiederholt
Ein Container ist ein reiner Platzhalter ohne eigenes Template - er definiert nur, wo etwas erscheinen darf. Ein Block ist mit einer Klasse und meist einem Template verbunden und rendert tatsächlich Inhalt. Beides wird über Layout-Handles gesteuert, die zu URLs bzw. Controller-Aktionen passen.
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="content">
<block class="Magento\Framework\View\Element\Template"
name="team.page"
template="Mironsoft_TeamPage::team/index.phtml">
<arguments>
<argument name="team_view_model" xsi:type="object">Mironsoft\TeamPage\ViewModel\TeamMembers</argument>
</arguments>
</block>
</referenceContainer>
</body>
</page>content ist der Standard-Container, in dem der Hauptinhalt jeder Seite landet - exakt wie in jedem anderen Magento-Theme. Auffällig ist hier vor allem der <argument> mit xsi:type="object": So wird ein ViewModel an den Block gebunden, statt eine eigene Block-Klasse zu schreiben (mehr dazu in Kapitel 7).
getChildNames(): die Hyvä-Standard-Iteration
Wenn ein Template mehrere Kind-Blocks ausgeben soll (zum Beispiel eine Reihe von Widgets in der Sidebar), nutzt Hyvä durchgängig dieselbe Iteration, die auch in klassischem Magento existiert - $block->getChildNames() gefolgt von $block->getChildHtml($name). Dieses Muster wird von Hyvä nicht ersetzt, sondern beibehalten:
<?php
/** @var \Magento\Framework\View\Element\Template $block */
?>
<div class="grid grid-cols-1 gap-6 md:grid-cols-3">
<?php foreach ($block->getChildNames() as $childName): ?>
<?= $block->getChildHtml($childName) ?>
<?php endforeach; ?>
</div>Tipp: Dieses Muster taucht in vielen Standard-Hyvä-Templates auf, etwa im Footer oder in der Sidebar der Kategorieseite. Wer ein bestehendes Hyvä-Template liest und getChildNames() sieht, weiß sofort: hier werden per Layout-XML zusätzliche Blocks eingehängt, ohne dass das Template selbst wissen muss, welche.
referenceBlock, before/after und move
Auch <referenceBlock> zum Anpassen bestehender Blocks, before/after zur Sortierung von Geschwister-Blocks und <move> zum Verschieben eines Blocks in einen anderen Container funktionieren unverändert. Ein Beispiel, das einen Standard-Block entfernt:
<referenceBlock name="catalog.compare.sidebar" remove="true" />Handles für unsere spätere Team-Seite
Der Dateiname team_index_index.xml aus dem Beispiel oben folgt der Standard-Magento-Konvention [frontName]_[controllerFolder]_[actionMethod].xml. Sobald wir in Kapitel 18 die eigentliche Route und den Controller anlegen, wird dieses Handle automatisch für die entsprechende URL geladen - Magento sucht danach, ohne dass wir es irgendwo explizit "verbinden" müssen.