如何在phtml中调用块而不是通过布局?

时间:2011-04-26 20:51:52

标签: magento

我已禁用心愿单块的布局:

<block type="catalog/product_view" name="product.info.addtoto" as="addtoto" template="catalog/product/view/addto.phtml"/>

我现在想在phtml中调用该块而不是将其添加到另一个布局。

我该如何直接打电话?

4 个答案:

答案 0 :(得分:31)

虽然Prattski是正确的,这是一个糟糕的形式(我正在这样说),有时候开发时,这是一个有价值的调试技术,或者它产生了几个小时的编程差异。本着这种精神,这是做坏事的坏习惯:

<?php print $this->getLayout()
                 ->createBlock("catalog/product_view")
                 ->setTemplate("catalog/product/view/addto.phtml")
                 ->toHtml(); ?>

如果有的话,请谨慎使用。

答案 1 :(得分:12)

 echo  Mage::app()->getLayout()
        ->createBlock('somemodule/someblock')
        ->setSomeVariable($variable)
        ->setTemplate('somemodule/someblock.phtml')
        ->toHtml();

这可以在任何地方用于调用块。 setSomeVariable($variable)如果设置可以someblock.phtml $this->getSomeVariable();

进行访问

答案 2 :(得分:3)

Chris - 您应该直接从模板中调用块。进入这将是一个坏习惯/做法。找到要添加块的模板的正确引用,并将其添加到布局xml中。然后从模板文件中使用:

echo $this->getChildHtml('your-block');

答案 3 :(得分:3)

我在这方面苦苦挣扎多年,发现如果你想从布局的一个完全独立的部分调用一个块,你需要使用略有不同的代码。使用:

<?php echo $this->getBlockHtml('any_block'); ?>

而不是:

<?php echo $this->getChildHtml('any_block'); ?>

使用此代码,您可以在任何地方创建自己的块,也可以从其他模块中选择块并将它们放在任何位置。