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.