Magento Layout: getChildHtml() mit leerem Ergebnis

Das Problem: Mysteriöserweise liefert getChildHtml() im Template ein leeres Ergebnis, obwohl die Kind-Blöcke offenbar erzeugt wurden.

Die Lösung: Blöcke im Magento-Layout sollten immer einen Namen haben. Ohne name-Attribut werden sie zwar angezeigt, Unter-Elemente können ihnen aber nicht zugeordnet werden und bleiben “verwaist”.

Verantwortlich ist die Methode Mage_Core_Model_Layout::_generateBlock(). Wie man sieht, wird der Parent Block nur zugewiesen, wenn er einen Namen hat:

            $parentName = $parent->getBlockName();
            if (!empty($parentName)) {
                $parentBlock = $this->getBlock($parentName);
            }

Man beachte, dass $parent hier ein XML-Knoten ist und kein Block-Objekt. Es hilft also nichts, dass Blöcke ohne Namen automatisch einen Namen wie ANONYMOUS_1 erhalten. Die Zuordnung geschieht über das name-Attribut des Knotens, so dass sie gleichermaßen für <block> wie für <reference> Knoten funktioniert.