ดูการเพิ่มกิจกรรมรถเข็น - รหัสรายการอ้างว่างเปล่า


11

ฉันพยายามที่จะจับเหตุการณ์ที่เกิดขึ้นเมื่อมีการเพิ่มรายการลงในรถเข็น ฉันกำลังดูเหตุการณ์ต่อไปนี้: checkout_cart_product_add_after

ตามแหล่งข้อมูลวีโอไอพีเหตุการณ์นี้ถูกไล่ออกหลังจากทุกอย่างถูกทำเพื่ออ้างอิง แต่เมื่อฉันเข้าถึงรหัสรถเข็นและรหัสคำพูดค่าว่างเปล่า:

$quoteItem = $observer->getQuoteItem();
$quote_item_id = $quoteItem->getItemId();
$cart = Mage::getSingleton('checkout/session');
$quote_id= $cart->getQuoteId();

ด้านบนส่งคืนค่าว่างสำหรับรหัสทั้งสองเมื่อไม่มีรายการในรถเข็นหากรถเข็นมีรายการที่รหัสรถเข็นมีมูลค่าแล้ว แต่ quote_item_id ไม่ได้

สังเกตว่ามีการถามก่อนหน้านี้ แต่คำถามไม่เคยได้รับการแก้ไขและการสนทนาสิ้นสุดลงจากปัญหานี้ ฉันต้องการ quote_item_id


ลองกับ$quoteItem = $observer->getEvent()->getQuoteItem();
Marius

สิ่งเดียวกัน id ว่างเปล่า
Nuno Furtado

เพิ่มสิ่งนี้ในผู้สังเกตการณ์ของคุณMage::log($quoteItem)และดูvar/log/system.logว่ารายการอ้างอิงมีลักษณะอย่างไร บางทีคุณอาจได้แนวคิดจากที่นั่น
Marius

นั่นเป็นข้อมูลจำนวนมากฉันจะหลงทางได้อย่างง่ายดาย
Nuno Furtado

1
= D ยังใหญ่เกินไปฉันลอง Mage :: getLog ($ quoteItem-> debug ()) และฉันสังเกตเห็นว่าไม่มี itemid ในอาร์เรย์ผลลัพธ์ ดูเหมือนว่าจะมี item_id ในองค์ประกอบ stock_item ภายใน quoteitem แต่ฉันไม่แน่ใจด้วยซ้ำว่าเป็นอะไร แก้ไข: นี่ไม่ใช่ค่านี้มีค่าเหมือนกัน
Nuno Furtado

คำตอบ:


22

อย่าทำอย่างนี้

ปัญหาของคุณคือว่ารถเข็นยังไม่ได้บันทึกให้ดูที่นี่:

https://github.com/LokeyCoding/magento-mirror/blob/magento-1.7/app/code/core/Mage/Checkout/controllers/CartController.php#L201-L206

public function addAction()
{
// ...
        $cart->addProduct($product, $params); // <-- you are inside this method
        if (!empty($related)) {
            $cart->addProductsByIds(explode(',', $related));
        }

        $cart->save(); // here is the saving, and therefore after this line,
                       //  quote and items have an id
// ...
        Mage::dispatchEvent('checkout_cart_add_product_complete',
            array('product' => $product, 'request' => $this->getRequest(), 'response' => $this->getResponse())
        );

สิ่งที่คุณต้องการคือการฟัง checkout_cart_add_product_complete

หากคุณต้องการที่จะทราบว่ารายการที่เพิ่มเข้ามารอบนี้เพียงแค่พวกเขาในธงcheckout_cart_product_add_afterเช่น$quoteItem->setIsNew()นั้นคุณสามารถเช็คอินcheckout_cart_add_product_completeสำหรับ$quoteItem->getIsNew()


ฉันคิดว่าน่าจะเป็นปัญหาก็คือเหตุการณ์นั้นจะส่งผลิตภัณฑ์ออกไปเท่านั้น เป็นความคิดที่ดีไหมที่จะซื้อตะกร้าสินค้าจากเซสชันและรับอาร์เรย์ชุดสุดท้าย ฉันกังวลว่าอาจมีสภาพการแข่งขันบางอย่าง
Nuno Furtado

1
แก้ไขคำตอบ คุณต้องตั้งค่าสถานะใบเสนอราคาของคุณแล้วปล่อยให้วีโอไอพีช่วยพวกเขาแล้วคุณก็รู้รายการคำพูดของคุณและผลิตภัณฑ์ :)
Fabian Blechschmidt

@FabianBlechschmidt มีเหตุการณ์ที่ต้องเปิดใช้งานขณะอัปเดตรถเข็นหรือไม่
ผีเสื้อ

ใช่หลายคนคุณสามารถขอเข้าร่วม dispatchEvent และตรวจสอบได้ที่: magento.stackexchange.com/a/9155/217และให้แน่ใจว่าได้อ่านความคิดเห็นจาก ben!
Fabian Blechschmidt

5

คุณสามารถใช้checkout_cart_product_add_afterเหตุการณ์นี้:

$observer->getEvent()->getQuoteItem()->getProduct()->getData()

ข้อมูลที่ส่งคืนมีลักษณะคล้ายกับสิ่งนี้:

Array
(
    [store_id] => 1
    [entity_id] => 1
    [entity_type_id] => 4
    [attribute_set_id] => 4
    [type_id] => simple
    [sku] => TESTSKU
    [has_options] => 0
    [required_options] => 0
    [created_at] => 2015-02-10T12:11:50-05:00
    [updated_at] => 2015-02-10 17:18:47
    [name] => Demo Product
    [url_key] => demo-product
    [country_of_manufacture] => 
    [msrp_enabled] => 2
    [msrp_display_actual_price_type] => 4
    [meta_title] => 
    [meta_description] => 
    [image] => no_selection
    [small_image] => no_selection
    [thumbnail] => no_selection
    [custom_design] => 
    [page_layout] => 
    [options_container] => container1
    [gift_message_available] => 
    [url_path] => demo-product.html
    [weight] => 1.0000
    [price] => 12.9900
    [special_price] => 
    [msrp] => 
    [status] => 1
    [visibility] => 4
    [tax_class_id] => 2
    [is_recurring] => 0
    [description] => It's a sample product, what do you want?
    [short_description] => It's a demo product
    [meta_keyword] => 
    [custom_layout_update] => 
    [news_from_date] => 
    [news_to_date] => 
    [special_from_date] => 
    [special_to_date] => 
    [custom_design_from] => 
    [custom_design_to] => 
    [group_price] => Array
        (
        )

    [group_price_changed] => 0
    [media_gallery] => Array
        (
            [images] => Array
                (
                )

            [values] => Array
                (
                )

        )

    [tier_price] => Array
        (
        )

    [tier_price_changed] => 0
    [stock_item] => Mage_CatalogInventory_Model_Stock_Item Object
    (
        // Crazy recursion happens here
    )
    [is_in_stock] => 1
    [is_salable] => 1
    [website_ids] => Array
        (
            [0] => 1
        )
    [cart_qty] => 1
    [qty] => 1
    [stick_within_parent] => 
    [customer_group_id] => 0
    [final_price] => 
)

สิ่งนี้ได้รับการทดสอบใน Magento 1.9.1.0 แต่จากสิ่งที่ฉันสามารถบอกได้นี่ควรใช้กับ 1.7


2

คุณสามารถใช้กิจกรรมต่อไปนี้

sales_quote_item_set_product

และรับไอเท็มในตัวสังเกตแบบนี้

$quote_item = $observer->getEvent()->getQuoteItem();
$item_id = $quote_item->getItemId();

เหตุการณ์นี้ถูกเรียกสำหรับทุกรายการที่อ้างถึงทุกครั้งที่สร้างรถเข็นไม่เพียง แต่เมื่อสินค้าถูกเพิ่มเข้าไปในรถเข็น
Rooster242

1

ฉันแก้ไขปัญหานี้ได้โดยโทรประหยัดจาก $ cart และ quoteItem ไม่เลือกสิ่งนี้ให้ถูกต้องเนื่องจากฉันไม่แน่ใจว่านี่เป็นวิธีที่ดีที่สุด

โซลูชัน Fabian Blechschmidt นั้นดีกว่ามากใช้อันนั้น

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