我已禁用心愿单块的布局:
<block type="catalog/product_view" name="product.info.addtoto" as="addtoto" template="catalog/product/view/addto.phtml"/>
我现在想在phtml中调用该块而不是将其添加到另一个布局。
我该如何直接打电话?
答案 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'); ?>
使用此代码,您可以在任何地方创建自己的块,也可以从其他模块中选择块并将它们放在任何位置。