**新编辑**Magento _prepareLayout()被称为5次到很多
所以我想要做的是这样的。
我想补充我的模块上的以下网址
http://magento.example.com/catalog/product/view/id/46
最终,这些元素将被确定为通过相关表我的模块中展现出来的产品视图生成新的表单元素
我预计如果我扩展Mage_Catalog_Block_Product_View在我的模块中,如下所示,我将能够在产品表单中创建一个包含此类表单字段的块,仅当他在我的模块中的相关表中时
所以我CREA特德在
app/design/frontend/default/default/templates/<module>/test.phtml
一个test.phtml文件,那么你可以在我所描述的View.php文件中看到波纹管我建块,并在产品视图中显示它。
它确实出现但是5倍太多。从下面的答案是正常的,以便回答这个问题,为什么它显示了五次,但留下了什么是正确的方法来处理,因为这个计划不起作用
**结束新编辑* *
我的模块中我打电话_prepareLayout(),当我在
/app/code/local/Namespace/Module/Product/Veiw.php
class <Namespace>_<module>_Block_Product_View extends Mage_Catalog_Block_Product_View {
protected function _toHtml() {
return parent::_toHtml();
}
public function _prepareLayout() {
$block = $this->getLayout()->createBlock(
'Mage_Core_Block_Template',
'my_block_name_here',
array('template' => '<module>/test.phtml')
);
if ($block){
$this->getLayout()->getBlock('content')->insert($block)->toHtml();
}else{
echo "no block";
}
return parent::_prepareLayout();
}
}
注意拉起页面
这里是我的代码 它这样做5次: 我刚刚注意到这也带走了价格可用性数量并添加到购物车按钮。这也是一个问题
编辑 首先我要感谢大家的答复。其次,我想给你更多的背景
选择在模块中这样做的原因是,我不希望该块显示在每个产品上。我所拥有的是一张我称之为自定义选项的表格,其中包含诸如头发颜色高度重量等产品的属性,并取决于产品附加的属性集合(如果有的话)将取决于HTML内容将显示在页面上。 所以在一种情况下,我得到一个下拉菜单,在另一种情况下,它可能会得到一个输入框。另一个非常重要的部分是,这必须设置,以便我可以把最终结果作为一个模块,可以安装,而不是担心,它不会显示,如果有人升级那里magento
说,这样做仍然有意义在xml文件中完成这一切?
上下文是Magento问题的一切。 1.“当你调用_prepareLayout”时,你在哪里调用它?你为什么要手动调用它。 2.“当我拉起页面时”什么页面? 3。你还在模块中做什么? – 2010-09-25 18:36:59
@Alan Storm感谢您的回应,1.我在那里调用它,在您的代码中看到它2.我正在拉起的页面是产品视图3.我在模块中执行的其他内容到目前为止与管理员端建立一个网格,并保存数据等。 – mcgrailm 2010-09-25 18:59:11
这似乎正在采取漫长的路要做一个简单的添加到页面布局。我同意艾伦的观点,更多的背景将会有所帮助。你如何测试它被执行的次数?是否有另一个地方可以执行此代码? – 2010-09-25 20:16:44