Add to Cart घटना - उद्धरण आइटम आईडी खाली है


11

मैं उस घटना को पकड़ने की कोशिश कर रहा हूं जो एक बार गाड़ी में एक आइटम को जोड़ने के बाद आग हो जाती है। मैं वर्तमान में निम्न घटना देख रहा हूँ: checkout_cart_product_add_after

Magento के स्रोत के अनुसार इस घटना को उद्धरण के लिए सब कुछ करने के बाद निकाल दिया जाता है। लेकिन जब मैं गाड़ी आईडी का उपयोग करता हूं और बोली आईडी मान रिक्त हो जाता है:

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

उपरोक्त दोनों रिटर्न आईडी के लिए खाली हैं जब गाड़ी में कोई आइटम नहीं हैं, अगर गाड़ी में पहले से कोई आइटम है तो आईडी आईडी का मूल्य है, लेकिन उद्धरण_इटेम_ड नहीं करता है।

यह नोटिस पहले भी पूछा जा चुका है, लेकिन सवाल कभी हल नहीं हुआ, और चर्चा इस मुद्दे से भटक गई। मुझे उद्धरण_इटेम_ड की आवश्यकता है।


के साथ प्रयास करें$quoteItem = $observer->getEvent()->getQuoteItem();
मेरियस

एक ही बात, आईडी खाली आती है।
नूनो फर्टाडो

इसे अपने पर्यवेक्षक में जोड़ें Mage::log($quoteItem)और देखें var/log/system.logकि उद्धरण आइटम कैसा दिखता है। हो सकता है कि आपको वहां से कोई आइडिया मिल जाए।
मारियस

यह एक बहुत बड़ी जानकारी है, मैं आसानी से इसमें खो
जाऊंगा

1
= D अभी भी बहुत बड़ा है, मैंने Mage की कोशिश की :: getLog ($ quotItem-> डिबग ()) और मैंने देखा कि परिणामी सरणी में कोई आइटम नहीं है। मालूम होता है कि quotitem के अंदर stock_item तत्व में एक item_id है लेकिन मुझे यह भी निश्चित नहीं है कि वह क्या है। संपादित करें: यह ऐसा नहीं है कि यह मान समान है
नूनो फर्टाडो

जवाबों:


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


मुझे लगा कि यह होगा, समस्या यह है कि घटना केवल उत्पाद को बाहर भेजती है। क्या सत्र से गाड़ी निकालना और अनुप्रास सरणी के अंतिम भाग को प्राप्त करना एक अच्छा विचार है? मुझे चिंता है कि किसी प्रकार की दौड़ की स्थिति हो सकती है
नूनो फर्टाडो

1
उत्तर को संपादित किया। आपको अपने उद्धरण आइटमों को फ़्लैग करने की आवश्यकता है, फिर मैगेंटो को उन्हें बचाने दें, फिर आप अपनी बोली वस्तु और उत्पाद को जानते हैं :)
फेबियन ब्लेसश्मिदट

@FabianBlechschmidt क्या गाड़ी को अपडेट करते समय ट्रिगर होने वाली कोई घटना है?
बटरफ्लाई

हां, बहुत से, आप बस डिस्पैच को हुक कर सकते हैं और इसे जांच सकते हैं: magento.stackexchange.com/a/9155/217 और बेन से टिप्पणी पढ़ने के लिए सुनिश्चित करें!
फैबियन ब्लेसश्मिड

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] => 
)

यह मैगेंटो 1.9.1.0 पर परीक्षण किया गया था, लेकिन मैं जो बता सकता हूं, यह 1.7 पर काम करना चाहिए


2

आप निम्नलिखित घटना का उपयोग कर सकते हैं

sales_quote_item_set_product

और इस तरह से पर्यवेक्षक में आइटम आईडी प्राप्त करें।

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

इस घटना को हर बार आइटम के लिए कहा जाता है, जब भी गाड़ी बनाई जाती है, तब ही नहीं जब कोई आइटम कार्ट में जोड़ा जाता है।
Rooster242

1

मैंने इस मुद्दे को $ कार्ट और saveItem पर सेव करके हल किया। यह सही नहीं है क्योंकि मुझे यकीन नहीं है कि यह सबसे अच्छा तरीका है।

फैबियन Blechschmidt समाधान बहुत बेहतर है, उस एक का उपयोग करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.