mcg*_*ilm 2 layout customization overriding module magento
**新编辑**
所以我要做的就是这个.
我希望在以下网址的产品视图中添加由我的模块生成的新表单元素
http://magento.example.com/catalog/product/view/id/46
Run Code Online (Sandbox Code Playgroud)
最终这些元素将被确定为由我的模块中的相关表格显示
我期望如果我在我的模块中扩展Mage_Catalog_Block_Product_View,如下所示,我将能够在产品表单中创建一个包含此类表单字段的块,只有当他在我的模块中的相关表中时
所以我在中创建了一个test.phtml文件
app/design/frontend/default/default/templates/<module>/test.phtml
Run Code Online (Sandbox Code Playgroud)
然后你可以在我描述的View.php文件中看到,我构建了块并在产品视图中显示它.
它确实出现了5次太多了.从下面的答案这是正常的,以便回答问题,为什么它出现五次,但留下问题是什么是正确的方法,因为这个计划不起作用
**结束新编辑**
在我的模块中,我调用_prepareLayout(),当我拉起页面时它会执行5次
这是我的代码
/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();
}
}
Run Code Online (Sandbox Code Playgroud)
注意: 我刚注意到这也消除了价格可用性数量并添加到购物车按钮.这也是一个问题
编辑 首先我要感谢大家的答案.其次,我想给你更多的背景
选择在模块中执行此操作的原因是我不希望块出现在每个产品上.我所拥有的是一个表格,我称之为自定义选项,包含产品的属性,如头发颜色高度重量等,并取决于附加到产品的属性集(如果有的话)将取决于什么html内容将显示在页面上.所以在一种情况下,我得到一个下拉菜单,在另一种情况下,它可能会得到一个输入框.另一个非常重要的部分是必须进行设置,以便我可以将最终结果作为可以安装的模块给出,而不用担心如果有人在那里进行升级就不会显示
那说在xml文件中执行此操作仍然有意义吗?
在我看来,您的代码覆盖了核心Magento模块,以实现在布局xml配置中可以轻松完成的任务.我强烈推荐以下内容:
parent::whatever()例如,如果<module>.xml在theme(app/design/frontend/default/<theme>/layout)中创建布局文件,则可以使用以下代码:
<catalog_product_view>
<reference name="content">
<block type="module/block" name"my_block_name_here" template="module/test.phtml"/>
</reference>
</catalog_product_view>
Run Code Online (Sandbox Code Playgroud)
然后,您需要getChildHtml('my_block_name_here');在phtml中使用调用来定位块.
因此,除非您内部发生其他功能_prepareLayout,否则无需覆盖核心,甚至覆盖默认值catalog.xml.
编辑(上面的小编辑)
所以现在在你的Block中(我建议你调用它Namespace_Module_Block_Product_Customattributes或类似的东西),你没有覆盖核心的Product_View块,而只是处理你的逻辑,用于渲染自定义属性的html小部件.将其余的等级价格,添加到购物车,其他通用产品块代码等留给Magento来解决.
如果您担心模块用户的升级路径,那么绝对不应该覆盖核心代码.使用配置方法并非常有选择地引入与系统"玩得很好"的代码,而不是尝试使用覆盖来实现它.
| 归档时间: |
|
| 查看次数: |
5850 次 |
| 最近记录: |