Magento 2 Experten — Hyvä Theme, Tailwind CSS & SEO aus einer Hand ›

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.

app/code/Mironsoft/TeamPage/view/frontend/layout/team_index_index.xml
<?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:

Beispiel: Kind-Blocks iterieren
<?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.