カスタムオプションコンテナーを上書き/置き換える正しい方法は何ですか?


7

バックグラウンド

特定の製品で利用可能なオプションに関連/影響を与えるいくつかのカスタムエンティティを作成するモジュールを開発しています。仕組みは次のとおりです。

製品が読み込まれると、製品の2つの属性を使用してカスタムエンティティに対してクエリが実行されます。

クエリの結果を使用して、次のように2段階で表示します(顧客の最初の選択は、2番目の選択肢に影響します)。

意図されたインターフェース

チャレンジ

これが私がフロントエンドで達成する必要があると知っていることです:

1. Product view.phtmlの2つのロジックをオーバーライドします。

- - 最初:

<form action="<?php echo $this->getSubmitUrl($_product) ?>" method="post" id="product_addtocart_form"<?php if($_product->getOptions()): ?> enctype="multipart/form-data"<?php endif; ?>>

...がである場合にenctype="multipart/form-data"のみ追加され、私の製品には実際に$_product->getOptions()は追加されないことに気づくでしょうtrue(これによりが返されますfalse

--- 2番目:

 <?php if ($_product->isSaleable() && $this->hasOptions()):?>
    <?php echo $this->getChildChildHtml('container1', '', true, true) ?>
 <?php endif;?>

...また、私の製品には実際にはカスタムオプションがないため、$this->hasOptions()戻りfalse、container1のレンダリングが妨げられます。

2.以下に示す ように、 'container1'-カスタムオプションのhtmlを「含む」子ブロック(ブロックですか?)を置換/上書き/上書きします。 何を交換する必要があるか

view.phtml直接コピーして編集することはこれを行う正しい方法ではないと主張するいくつかの投稿を読みましたが、代替手段は何ですか?

第二に、私が読んだIすることができますいずれかremoveまたは作品-私が使用する必要があり、その後、どのように私は正しく自分に置き換えてください方法?unSetcontainer1container1

どうもありがとうございました!


これに対する良い解決策を見つけましたか?あなたcatalog.xmlはそれをPRODUCT_TYPE_xxxxxxハンドルでどのように見るのですか?
pspahn

これが標準の構成可能製品とどのように異なるかはわかりません。説明できますか?
ファンタスティック

@fantasticrice TriggerDanについて話すことはできませんが、私の場合、デフォルトのMagento製品タイプはクライアントのカタログをモデル化するのに十分ではありませんでした。
pspahn

@pspahn-Magentoでモデル化できなかった点は何ですか?
ファンタスティック

私の場合、(他の多くのものの中でも)4桁を超える精度の価格表が必要でした(平方フィートによる価格設定を考えてください)。
pspahn

回答:


2

私はしばらくの間、同様のモジュールに取り組んでおり、ほとんど同じことに遭遇しました。これを機能させるためにカスタム製品タイプを追加しました。

キーはproduct_type_dataブロックです。これにより、他のテンプレートファイルを変更せずに、このブロックをオーバーライドできます。私のモジュールのレイアウトXMLファイルに、以下を追加しました:

<PRODUCT_TYPE_myproduct translate="label" module="my_module">
    <reference name="content">
        <reference name="product.info">
            <block type="my_module/product_type_myproduct" name="product.info.myproduct" as="product_type_data" template="my_module/product/type/myproduct.phtml">

            </block>
        </reference>
    </reference>
</PRODUCT_TYPE_myproduct>

そこから、テンプレートにフォームフィールドを追加します。値はsales_quote_add_item、ユーザーの選択をに追加できるイベントのオブザーバーに渡されますadditional_options

さらに、カスタム製品タイプを使用する_prepareProduct()ことにより、に渡されるさまざまな値を設定できる独自のメソッドを使用できますparent::_prepareProduct($buyRequest, $product, $processMode)

(私はおそらく戻ってきて、これを後でさらに詳細に変更します)


2

この質問に答えるのに遅すぎないことを望みます。製品に関連付けられたカスタムオプションが必要になります。製品はカスタムオプション値を持っている場合にのみそれを運ぶのでcatalog_product_option、adminhtmlのマイナーな調整を含むテーブルにカスタムフィールドを追加して、カスタムフィールドのあるカスタムオプションを追加します。
これは、製品のレンダリング、カート、注文フローを編集する必要がある出力を実現する最も簡単な方法です。
ここで、カスタムオプションをフィルタリングする際に役立つ追加のフィールドでカスタムオプションが必要になると、そのカスタムオプションはフロントエンドでさらにカスタマイズする必要があるかどうかが決まります。
そのフィールドの値に 応じて、コードを内local/mage/catalog/Block/Productまたはに記述しますlayout/view
。正確なファイルを見つけ出し、必要に応じて変更します。


回答(遅くなるかもしれません)はいつでも歓迎します。
Julien Lachal

1

まず、Magentoのテンプレートをオーバーライドするには、レイアウトフォルダーにlocal.xmlファイルを作成し、オーバーライドしようとしているテンプレートまたはビューのセクションに対応するノードをオーバーライドします。または独自のテンプレートフォルダーを作成し、そこからレイアウトとテンプレート構造をオーバーライドしますここに良い例があります。2番目に、構成可能な製品を使用して、達成しようとしていることを実行しようとしました。これは、あなたが説明したように、構成可能な製品がすでにそうしているためです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.