เหตุการณ์วีโอไอพีเพื่อคำนวณราคาเมื่อมีการเปลี่ยนแปลงฟิลด์ข้อความของตัวเลือกที่กำหนดเอง


10

ฉันกำลังพยายามสร้างผลิตภัณฑ์ที่มีฟิลด์ข้อความที่กำหนดเองสองฟิลด์: ความยาวและความกว้าง เมื่อผู้ใช้พิมพ์ทั้งความยาวและความกว้างราคาจะต้องคำนวณผ่านสูตรที่กำหนดเอง

ฉันกำลังพยายามค้นหาเหตุการณ์ที่ถูกต้องในการเชื่อมต่อผู้สังเกตการณ์ใครรู้ว่าอาจเป็นอะไร

นี่คือสิ่งที่ฉันรู้และได้ลอง

1) กล่องข้อความฟิลด์ที่กำหนดเองในมุมมองผลิตภัณฑ์มีเหตุการณ์ onchange ที่ฉันไม่ได้คิดวิธีการแตะยังผ่านเหตุการณ์ผู้สังเกตการณ์ - "opConfig.reloadPrice ()

2) ถ้าฉันสร้างผู้สังเกตการณ์ในเหตุการณ์ sales_quote_add_item ฉันสามารถเปลี่ยนแปลงราคาผ่านสูตรเมื่อเพิ่มลงในรถเข็น ด้วยวิธีนี้ฉันยังต้องการวิธีเปลี่ยนในมุมมองผลิตภัณฑ์ก่อนที่จะเพิ่มลงในรถเข็น

3) ฉันได้ลองใช้งาน event catalog_product_get_final_price แล้ว แต่ดูเหมือนว่าจะเริ่มทำงานเมื่อโหลดหน้าผลิตภัณฑ์เท่านั้นดังนั้นหลังจากที่เพิ่มความยาวหรือความกว้างของผลิตภัณฑ์แล้วจะไม่เริ่มใหม่

ความคิดใด ๆ ที่จะได้รับการชื่นชมอย่างมาก!


Fabian ช่วยคุณได้ไหม ถ้าเป็นเช่นนั้นคุณสามารถโปรดยอมรับหรือชี้แจงเพื่อที่เราจะได้ช่วยไหม?
philwinkle

คำตอบ:


2

ฉันใช้สำหรับกรณีนี้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);
        }
    }
}

ในฝั่งไคลเอ็นต์คุณสามารถใช้ JS เพียงไม่กี่บรรทัดเพื่ออัปเดตราคา


2

catalog_product_get_final_priceเป็นเหตุการณ์ฝั่งเซิร์ฟเวอร์ที่ถูกต้องไม่เพียง แต่เกิดขึ้นเมื่อโหลดหน้าผลิตภัณฑ์เท่านั้น แต่ยังรวมถึงเมื่อมีการเพิ่มผลิตภัณฑ์ลงในรถเข็น ในกรณีนี้คุณมีตัวเลือกที่กำหนดเองทั้งหมดที่เลือกพร้อมใช้งานกับ:

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

(ดูเพิ่มเติมที่: มีวิธีใดบ้างที่ผู้ใช้สามารถกำหนดราคาที่กำหนดเองที่ต้องการมากกว่าศูนย์และดำเนินการสั่งซื้อผลิตภัณฑ์ใด ๆ ได้หรือไม่ )


การคำนวณราคาใหม่ในหน้าผลิตภัณฑ์เป็นอีกหัวข้อหนึ่งและต้องการ JavaScript reloadPriceเป็นฟังก์ชั่นที่เหมาะสมในการขอฉันจะขยายมันเช่นนี้

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();
    }
});
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.