magento 有没有办法创建一个块并调用它的toHtml()
方法,而不必加载整个布局对象。
例如,在我的一个 ajax 控制器中,我想将某个块作为 json 输出发送,我对任何其他块不感兴趣,但我不得不执行以下操作:
$this->loadLayout();
$this->getLayout()->getBlock('my_block_name')->toHtml();
它加载了整个布局,这似乎是不必要的。
magento 有没有办法创建一个块并调用它的toHtml()
方法,而不必加载整个布局对象。
例如,在我的一个 ajax 控制器中,我想将某个块作为 json 输出发送,我对任何其他块不感兴趣,但我不得不执行以下操作:
$this->loadLayout();
$this->getLayout()->getBlock('my_block_name')->toHtml();
它加载了整个布局,这似乎是不必要的。
我只是这样完成了这个:
在我的模块的布局 XML 中:
<mymodule_ajax_action>
<block type="core/template_facade" name="root" template="path/to/template/file.phtml"/>
</mymodule_ajax_action>
通过将块命名为“根”,它仅用这个模板文件替换了整个布局。
所以在我的控制器中:
public function actionAction() {
$this->loadLayout();
$this->renderLayout();
}
只返回那个块。
您可以尝试以下方法:
$layout = Mage::getSingleton('core/layout');
$html = $layout
->createBlock('module/block_type')
->setTemplate('template/file.phtml')
->toHtml();
从您的代码中,您看起来好像在控制器中,因此您可以将代码稍微缩短到以下(在功能上绝对没有区别,只是少了 1 行代码)...
$html = $this->getLayout()
->createBlock('module/block_type')
->setTemplate('template/file.phtml')
->toHtml();