我正在编写一个隐藏添加到购物车按钮和价格(产品视图)的模块,并在其位置(基于产品属性)显示一个简短的表单(联系我们之类的东西)。
因为有一个表格包含了产品视图页面上的大部分重要信息,所以我不能简单地用自己的表格注入我自己的 phtml 文件,因为那样会留下嵌套的表格。所以现在看起来我必须用我自己的覆盖整个目录/产品/view.phtml 文件才能更改表单操作。像这样:
<catalog_product_view>
<reference name="product.info">
<action method="setTemplate">
<template>mycompany/mymodule/catalog/product/view.phtml</template>
</action>
</reference>
</catalog_product_view>
然后在我的视图文件中,我相应地更改表单操作。
$formAction = $this->getSubmitUrl($_product);
if($_product->getData("myattribute")){
$formAction = $this->getBaseUrl().'mycontroller/';
}
<form action="<?php echo $formAction ?>" ...[snip]
这似乎只是为了改变表单动作而过度杀伤力。
我看到它的方式有两个选择:
1) 将一些 javascript 添加到我的提交按钮 onclick 事件中,该事件将默认表单操作更改为转到我的控制器。这种方式劫持添加到购物车表单。(但如果禁用 javascript,这将有问题)
2)有一个观察者检查每个添加到购物车事件,看看它是否需要添加到购物车或应该处理我的表单。(如果需要,表格将显示在产品页面上)
(目前我没有考虑与自定义主题等集成......我只想一次解决一件事!-好吧,也许一只眼睛关注自定义主题......)
谁能提出更好或更有效的方法来实现这一目标?或者如果不是,您会推荐哪个选项,1 还是 2?
谢谢