是否有一种方法可以在magento中创建一个块并调用其toHtml()
方法,而无需加载整个布局对象。
例如,在我的一个ajax控制器中,我想发送一个特定的块作为json输出,我对其他任何块都不感兴趣,但我不得不做以下事情:
$this->loadLayout();
$this->getLayout()->getBlock('my_block_name')->toHtml();
加载整个布局似乎没必要。
答案 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();