Sự kiện Magento để tính giá khi trường văn bản tùy chọn tùy chỉnh thay đổi


10

Tôi đang cố gắng tạo ra một sản phẩm có hai trường văn bản tùy chỉnh: Chiều dài và Chiều rộng. Khi người dùng nhập cả chiều dài và chiều rộng, giá cần tính toán thông qua công thức tùy chỉnh.

Tôi đang cố gắng tìm sự kiện chính xác để kết nối một người quan sát với - có ai biết đó có thể là gì không?

Đây là những gì tôi biết và đã thử

1) hộp văn bản trường tùy chỉnh trong chế độ xem sản phẩm có một sự kiện trao đổi mà tôi chưa tìm ra cách truy cập thông qua một sự kiện quan sát viên - "opConfig.reloadprice ()

2) Nếu tôi xây dựng một người quan sát về sự kiện sales_quote_add_item, thì tôi có thể thay đổi giá thông qua công thức khi nó được thêm vào giỏ hàng. Với phương pháp này, tôi vẫn cần một cách để thay đổi nó trong chế độ xem sản phẩm trước khi thêm vào giỏ hàng.

3) Tôi cũng đã thử danh mục sự kiện_product_get_final_price nhưng điều này dường như chỉ kích hoạt khi trang sản phẩm được tải, vì vậy sau khi chiều dài hoặc chiều rộng của sản phẩm được thêm vào, nó sẽ không kích hoạt lại.

Bất kì ý kiến ​​nào đều được đánh giá cao!


Fabian đã giúp bạn điều này? Nếu vậy bạn có thể vui lòng chấp nhận hoặc làm rõ để chúng tôi có thể giúp đỡ?
philwinkle

Câu trả lời:


2

Tôi đã sử dụng cho usecase này sales_quote_collect_totals_before:

/**
 * Set prices
 *
 * @param Varien_Event_Observer $observer
 */
public function salesQuoteCollectTotalsBefore(Varien_Event_Observer $observer)
{
    /* @var $quote Mage_Sales_Model_Quote */
    $quote = $observer->getQuote();
    foreach ($quote->getAllItems() as $quoteItem) {
        if (is your product of choice) {
            /* @var $quoteItem Mage_Sales_Model_Quote_Item */
            $product = $quoteItem->getProduct();
            $price = whatever formula you want to use;
            $product->setPrice($price);
        }
    }
}

Về phía khách hàng, bạn chỉ có thể sử dụng một vài dòng JS để cập nhật giá?


2

catalog_product_get_final_pricelà sự kiện phía máy chủ chính xác, nó không chỉ được kích hoạt khi trang sản phẩm được tải mà còn khi sản phẩm được thêm vào giỏ hàng. Trong trường hợp này, bạn có tất cả các tùy chọn tùy chỉnh đã chọn có sẵn với:

$observer->getProduct()->getCustomOption($customOptionName);

(Xem thêm: Có cách nào mà người dùng có thể đặt giá mong muốn tùy chỉnh lớn hơn 0 và tiến hành giỏ hàng cho bất kỳ sản phẩm nào không? )


Tính toán lại giá trong khi trên trang sản phẩm là một chủ đề khác và cần JavaScript. reloadPricelà chức năng phù hợp để kết nối, tôi sẽ mở rộng nó như thế này:

Product.prototype.reloadPrice = Product.prototype.reloadPrice.wrap(function(callOriginal) {
    if (should_be_calculated_based_on_length_and_with) {

        // copy the original reloadPrice function here and change how `price` is calculated

    } else {
        callOriginal();
    }
});
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.