Magento布局:仅加载一个块

7 magento

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

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

$this->loadLayout();
$this->getLayout()->getBlock('my_block_name')->toHtml();
Run Code Online (Sandbox Code Playgroud)

这会加载整个布局,这似乎是不必要的.

Eme*_*ing 8

我刚刚完成了这样做:

在我的布局XML模块中:

<mymodule_ajax_action>
    <block type="core/template_facade" name="root" template="path/to/template/file.phtml"/>
</mymodule_ajax_action>
Run Code Online (Sandbox Code Playgroud)

通过命名块"root",它仅使用此模板文件替换整个布局.

所以在我的控制器中:

public function actionAction() {
    $this->loadLayout();
    $this->renderLayout();
}
Run Code Online (Sandbox Code Playgroud)

只返回那个块.

  • 好方案!如果有人忘了,XML标识符必须全部小写:`public function fooBarBazAction` - >`<mymodule_ajax_foobarbaz>` (2认同)

Dre*_*ter 4

您可以尝试以下操作:

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

从您的代码来看,您似乎在控制器中,因此您可以将代码稍微缩短为以下内容(功能上绝对没有区别,只是少了一行代码)...

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