7

magento 有没有办法创建一个块并调用它的toHtml()方法,而不必加载整个布局对象。

例如,在我的一个 ajax 控制器中,我想将某个块作为 json 输出发送,我对任何其他块不感兴趣,但我不得不执行以下操作:

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

它加载了整个布局,这似乎是不必要的。

4

2 回答 2

8

我只是这样完成了这个:

在我的模块的布局 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();
}

只返回那个块。

于 2013-05-24T18:06:08.903 回答
4

您可以尝试以下方法:

$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();
于 2012-07-22T19:47:20.637 回答