2014-10-17 5 views
0

У меня есть этот блок в файле макет:Magento: Добавить дочерний блок программно

<block type="core/template_facade" name="product.info.container2" as="container2"> 
        <action method="setDataByKey"><key>alias_in_layout</key><value>container2</value></action> 
        <action method="setDataByKeyFromRegistry"><key>options_container</key><key_in_registry>product</key_in_registry></action> 
        <action method="append"><block>product.info.options.wrapper</block></action> 
        <action method="append"><block>product.info.options.wrapper.bottom</block></action> 
       </block> 

И этот блок:

$item_block = Mage::getSingleton('core/layout')->createBlock('catalog/product_list','item')->setTemplate('sns/ajaxcart/catalog/product/item.phtml')->setData('product', $product); 

Как есть верхний блок как $ item_block Детских программно? Я знаю, что это должно быть что-то вроде:

$upper_block = <create upper block>; 
$item_block->setChild('somealias',$upper_block); 

Однако, верхний блок, кажется, слишком усложнять для меня, чтобы знать, как создать его программно. Пожалуйста помоги!

ответ

0

Попробуйте

$upper_block = Mage::getSingleton('core/layout') ->createBlock('core/template_facade', "product.info.container2"); 
$upper_block->setDataByKey('alias_in_layout', 'container2'); 
$upper_block->setDataByKeyFromRegistry('options_container', 'product'); 
$upper_block->append('product.info.options.wrapper'); 
$upper_block->append('product.info.options.wrapper.bottom'); 

$item_block = Mage::getSingleton('core/layout')->createBlock('catalog/product_list','item')->setTemplate('sns/ajaxcart/catalog/product/item.phtml')->setData('product', $product); 

$item_block->setChild('somealias',$upper_block); 
1

На уровне блоков вы можете сделать это следующим образом:

protected function _prepareLayout() 
{ 
    $block = $this->getLayout()->createBlock('catalog/product_list') 
    $this->setChild('items', $block); 
    return parent::_prepareLayout(); 
}