1

次の 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 などの命名について心配する必要はありません。会社のデータが含まれていたため、上書きする必要がありました。この例では間違っている可能性がありますが、元のコードには含まれていない可能性が高いです。)

4

1 に答える 1

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');
于 2013-01-28T14:22:14.403 に答える