Sử dụng Magento opConfig.reloadprice () với các tùy chọn jQuery và Tùy chỉnh


7

Tôi đang cố gắng sử dụng Magento reloadPrice()với jQueryđể làm mới giá. Tôi có một sản phẩm cấu hình với các tùy chọn tùy chỉnh. Không có jQuery, SELECTmã cho tùy chọn là:

<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>

Với jQuery, tôi loại bỏ mã thay đổi Prototype và thử tính giá cho tùy chọn của mình (giả sử $ 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();

});

Giá của sản phẩm cấu hình: $ 150.

Thêm một tùy chọn (SELECT): chúng tôi thêm $ 50.

Giá mới $ 200 được hiển thị trong trang sản phẩm, nhưng không phải trong trang giỏ hàng: trang giỏ hàng chỉ hiển thị $ 150 không chính xác.

Câu trả lời:


2

Mã javascript chỉ thực thi ở phía máy khách.
Vì vậy, về cơ bản bạn có thể làm bất cứ điều gì với giá (như bạn đã làm) nhưng điều này không ảnh hưởng đến các tính toán phía máy chủ về giá của sản phẩm khi được thêm vào giỏ hàng.
Nếu bạn muốn một logic tùy chỉnh cho giá trong giỏ hàng, bạn cần viết một số mã thay đổi giá.
Tôi khuyên bạn nên quan sát một trong những sự kiện này checkout_cart_save_beforehay checkout_cart_add_product_completehay catalog_product_get_final_price. xem những gì từng phù hợp với nhu cầu của bạn.


Được giải quyết với 2 người quan sát, checkout_cart_product_add_after người quan sát để thay đổi giá Sản phẩm lần 1 được thêm vào giỏ hàng và checkout_cart_update_items_after để thay đổi giá cho từng mặt hàng trong giỏ hàng (khi người dùng nhấp vào nút "Sửa đổi giỏ hàng" trên trang giỏ hàng). Trên trang giỏ hàng, bằng cách nhấp vào liên kết "Chỉnh sửa" trang sản phẩm sẽ hiển thị để người dùng có thể thay đổi số lượng, ... và nhấp vào nút "Cập nhật giỏ hàng" (không làm mới giá). Làm thế nào để buộc hành động "Cập nhật giỏ hàng" để xử lý mã trong checkout_cart_product_add_after ? Có phải mã này được thực thi chỉ là sản phẩm lần 1 được thêm vào giỏ hàng?
tokey 19/03/2015

1

Giải pháp: Sử dụng 2 quan sát viên:

//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);
            }
        }
    }

Nó đang chạy tốt nhưng .... vẫn còn một câu hỏi:

Trên trang giỏ hàng, khi người dùng nhấp vào liên kết "Chỉnh sửa" để chỉnh sửa sản phẩm trong trang sản phẩm để anh ta có thể thay đổi số lượng, ... và nhấp vào nút "Cập nhật giỏ hàng", nút cập nhật này không đọc checkout_cart_product_add_after để làm mới giá.

Làm cách nào để buộc hành động "Cập nhật giỏ hàng" này xử lý mã trong checkout_cart_product_add_after observer? Có phải mã này được thực thi chỉ lần đầu tiên sản phẩm được thêm vào giỏ hàng?

Cảm ơn.

tokey

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.