Magento在构造函数中添加子块来阻止

时间:2013-01-28 11:59:14

标签: php magento magento-1.7

我有以下XML:

<reference name="content">
    <block type="name/myblockname" name="blockname" alias="blockalias" template="name/myblockname.phtml">
        <action method="setData"><key>name</key><value>value</value></action>
        <block type="core/template" name="otherblock" template="catalog/product/view/otherblock.phtml"/>
    </block>
</reference>

我需要与块构造函数中的代码相同,我试过这个。结果是呈现了块,但name / myblockname.phtml中的getChild返回null值而不是块。

class MyCompany_ModuleName_Block_MyBlock extends Mage_Core_Block_Template
{

    public function  __construct() {
        parent::__construct();
        // $layout = $this->getLayout();  // this didn't work
        // $layout = Mage::getModel('core/layout'); // this didn't work
        $layout = $this->loadLayout()->getLayout(); // this didn't work
        $block = $layout->createBlock("core/template");
        $block->setTemplate("catalog/product/view/otherblock.phtml");
        $block->setNameInLayout("otherblock");
        $this->append($block, "otherblock");

    }

    // ... other stuff here ...

}

以下是我将我的块包含在CMS页面中的方法:

{{block type="name/myblockname" name="value" template="name/myblockname.phtml"}}

我想知道我做错了什么,或者甚至可以在Magento中做到这一点? (不要担心xml等namings,我不得不覆盖那些,因为它们包含公司数据,所以在这个例子中它们可能是错的,但很可能不是原始代码。)

1 个答案:

答案 0 :(得分:3)

我强烈建议使用“假” - 构造函数_construct(),由核心__construct()调用以避免误用。 然后添加一个新的子块使用此代码:

function _construct() {
    $layout = Mage::getSingleton('core/layout');
    $block  = $layout->createBlock('core/template','mychildblockname');
    $block->setTemplate('your/childtemplate.phtml');
    $this->append($block);
}

然后在块的phtml文件中,您通过以下方式呼叫孩子:

$this->getChildHtml('mychildblockname');