Magento布局:仅加载一个块

时间:2012-07-22 16:25:43

标签: magento

是否有一种方法可以在magento中创建一个块并调用其toHtml()方法,而无需加载整个布局对象。

例如,在我的一个ajax控制器中,我想发送一个特定的块作为json输出,我对其他任何块都不感兴趣,但我不得不做以下事情:

$this->loadLayout();
$this->getLayout()->getBlock('my_block_name')->toHtml();

加载整个布局似乎没必要。

2 个答案:

答案 0 :(得分:8)

我刚刚完成了这个:

在我的模块布局XML中:

<mymodule_ajax_action>
    <block type="core/template_facade" name="root" template="path/to/template/file.phtml"/>
</mymodule_ajax_action>

通过命名块“root”,它只用这个模板文件替换了整个布局。

所以在我的控制器中:

public function actionAction() {
    $this->loadLayout();
    $this->renderLayout();
}

只返回那个块。

答案 1 :(得分:4)

您可以尝试以下操作:

$layout = Mage::getSingleton('core/layout');
$html = $layout
            ->createBlock('module/block_type')
            ->setTemplate('template/file.phtml')
            ->toHtml();

从您的代码中,它看起来好像您在控制器中,因此您可以将代码缩短到以下(完全没有功能差异,只需少一行代码)...

$html = $this->getLayout()
             ->createBlock('module/block_type')
             ->setTemplate('template/file.phtml')
             ->toHtml();