カートに追加ボタンと価格 (製品ビュー) を非表示にし、その場所に (製品属性に基づいて) 短いフォーム (お問い合わせのようなもの) を表示するモジュールを作成しています。
製品ビュー ページには重要な情報のほとんどをまとめたフォームがあるため、ネストされたフォームが残るため、独自の phtml ファイルに独自のフォームを単純に挿入することはできません。したがって、フォームのアクションを変更するには、catalog/product/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]
これは、フォームのアクションを変更するだけでも大げさすぎるように思えます。
私の見方では、2つのオプションがあります。
1)送信ボタンのonclickイベントにjavascriptを追加して、デフォルトのフォームアクションをコントローラーに移動するように変更します。このようにして、カートへの追加フォームをハイジャックします。(ただし、javascript が無効になっていると問題が発生します)
2)カートに追加するイベントをすべてチェックして、カートに追加する必要があるかどうか、または代わりにフォームを処理する必要があるかどうかを確認するオブザーバーを用意します。(フォームは必要に応じて商品ページに表示されます)
(現時点では、カスタム テーマなどとの統合については考えていません…一度に 1 つのことについて理解を深めたいだけです! - わかりました。カスタム テーマに目を向けるかもしれません..)
これを達成するためのより良い、またはより効率的な方法を誰かが提案できますか? または、そうでない場合、1 または 2 のどちらをお勧めしますか?
ありがとう