7

レイアウト オブジェクト全体をロードすることなくtoHtml()、magento でブロックを作成してそのメソッドを呼び出す方法はありますか。

たとえば、私のajaxコントローラーの1つで、特定のブロックを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 に答える