Magento opConfig.reloadPrice()をjQueryおよびカスタムオプションで使用する


7

私は、Magentoのを使用しようとしていますreloadPrice()jQuery価格を更新します。カスタムオプションを備えた構成可能な製品があります。なしのjQuery場合、SELECTオプションのコードは次のとおりです。

<select id="select_281" class=" required-entry product-custom-option" title="" name="options[281]" onchange="opConfig.reloadPrice()">
<option value="0"></option>
<option rel="1" price="0" value="275"></option>
<option rel="2" price="0" value="276"></option>
</select>

jQueryを使用して、Prototype onchangeコードを削除し、オプションの価格を計算します(たとえば$ 50)。

jQuery('#select_281').removeAttr('onchange').change(function(){

//Price of the option to add to a basic price of the conf product
price = 50;

optionsPrice.changePrice('opConfig', price);
optionsPrice.reload();

});

構成可能製品の価格:$ 150。

オプション(SELECT)を追加:50ドルを追加します。

新しい価格$ 200が製品ページに表示されますが、カートページには表示されません:カートページには$ 150しか表示されませんが、これは正しくありません。

回答:


2

JavaScriptコードはクライアント側でのみ実行されます。
したがって、基本的には(すでに行ったように)価格で何でもできますが、カートに追加されたときのサーバーの価格計算には影響しません。
カート内の価格のカスタムロジックが必要な場合は、価格を変更するコードを記述する必要があります。
これらのイベントのcheckout_cart_save_beforeいずれcheckout_cart_add_product_completeかを監視することをお勧めしますまたはまたはcatalog_product_get_final_price。今まであなたのニーズに合ったものを見てください。


2人のオブザーバーで解決されました。checkout_cart_product_add_afterオブザーバーが最初に製品がカートに追加されたときに価格を変更し、checkout_cart_update_items_afterがカート内の各アイテムの価格を変更します(ユーザーがカートページの[カートを変更]ボタンをクリックしたとき)。カートページで、リンクをクリックして[編集]製品ページを表示すると、ユーザーは数量を変更できます。[カートの更新]ボタンをクリックします(価格を更新しません)。「カートの更新」アクションでcheckout_cart_product_add_afterオブザーバーのコードを処理する方法?このコードは、製品が初めてカートに追加されたときに実行されますか?
tokey

1

解決策:2人のオブザーバーを使用します。

//checkout_cart_product_add_after observer
    public function modifyPrice(Varien_Event_Observer $observer)
    {
        $item = $observer->getQuoteItem();
        $item = ( $item->getParentItem() ? $item->getParentItem() : $item );
        $productType = $product->getTypeID();
        $price = 100;//Unit price of product without engraving, 100 for example

        //Unit price with engraving, depending of 2 custom options of configurable product
        if($productType == 'configurable'){
            //get custom options of config here
            .
            .
            $engravingPrice = 1.2;//Get unit price with engraving from a special MySQL table
            $finalUnitPrice = $price + $engravingPrice;//Final custom price

            //Modify the price
            $item->setCustomPrice($finalUnitPrice);
            $item->setOriginalCustomPrice($finalUnitPrice);
            $item->getProduct()->setIsSuperMode(true);
        }
    }

    //checkout_cart_update_items_after observer
    public function modifyCartItems(Varien_Event_Observer $observer)
    {
        foreach ($observer->getCart()->getQuote()->getAllVisibleItems() as $item ) {
            if ($item->getParentItem()) {$item = $item->getParentItem();}
            $productType = $product->getTypeID();
            $productType = $product->getTypeID();
            $price = 100;//Unit price of product without engraving

            //Unit price with engraving, depending of 2 custom options of configurable product
            if($productType == 'configurable'){
                .
                .
                $engravingPrice = 1.2;//Get unit price with engraving from a special MySQL table
                $finalUnitPrice = $price + $engravingPrice;//Final custom price

                //Modify the price for the item
                $item->setCustomPrice($finalUnitPrice);
                $item->setOriginalCustomPrice($finalUnitPrice);
                $item->getProduct()->setIsSuperMode(true);
            }
        }
    }

正常に動作していますが、1つの質問が残っています。

カートページで、ユーザーが[編集]リンクをクリックして商品ページで商品を編集し、数量を変更できるようにして[カートの更新]ボタンをクリックすると、この更新ボタンはcheckout_cart_product_add_afterを読み取らずに価格を更新します。

この「カートの更新」アクションを強制して、checkout_cart_product_add_afterオブザーバーのコードを処理する方法は?このコードは、製品がカートに初めて追加されたときに実行されますか?

ありがとう。

tokey

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