पर्यवेक्षक का उपयोग करके कार्ट में सिर्फ जोड़े गए उत्पाद के लिए कस्टम विकल्प और पुरस्कार बनाना


15

मैं ऑब्ज़र्वर का उपयोग करके क्विटिटेम में कस्टम विकल्प जोड़ना चाहता हूं जो पर्यवेक्षक चेकआउटकार्टप्रोडक्टडॉटआर्डर घटना और आग के बाद उत्पाद कार्ट में जोड़ा गया।

public function checkoutCartProductAddAfter(Varien_Event_Observer $observer)
{

 $item = $observer->getQuoteItem();  
  $item->addOption(new Varien_Object(
            array(
                    'product' => $item->getProduct(),
                    'label' => 'Free Gifts',
                    'value' => 'Spend $50 and get gift product worth $9.99'
                 )
        ));
    return;

}

मेरा पर्यवेक्षक काम कर रहा है लेकिन मैं अतिरिक्त उत्पाद में कस्टम विकल्प नहीं जोड़ पा रहा हूं। कृपया केवल जोड़ा उत्पाद के लिए पर्यवेक्षक का उपयोग करके कस्टम विकल्प जोड़ने में मदद करें।


प्रेक्षक में उत्पाद की कस्टम कीमत बदलने के लिए भी मुझे प्रदान करें। मैं कस्टम मूल्य को शून्य में जोड़ना चाहता हूं। अग्रिम धन्यवाद
कीरु पटेल

जवाबों:


19

@Tim ने सप्ताहांत में इस मुद्दे के बारे में बात की: https://docs.google.com/pretation/d/1efPznQSVTrT1HAD1xQvCPC-Tgvr8jYok4X7Z7Jhm9jE/edit

आपको क्या चाहिए विधि 2: Config.xml में निम्नलिखित घटना जोड़ें

<sales_quote_collect_totals_before>
<observers>
<hackathon_presentation>
<type>singleton</type>
<class>modulename/observer</class>
<method>salesQuoteAddressCollectTotalsBefore</method>
</hackathon_presentation>
</observers>
</sales_quote_collect_totals_before>

Observer.php में निम्नलिखित विधि जोड़ें

   public function salesQuoteAddressCollectTotalsBefore($observer)
    {
        $quote = $observer->getQuote();
        $quote_items = $quote->getItemsCollection();
        foreach ($quote_items as $item) {
            $additionalOptions = array(
                array(
                    'code'  => 'my_code',
                    'label' => 'This text is displayed through additional options',
                    'value' => 'ID is ' . $item->getProductId() . ' and SKU is ' . $item->getSku()
                )
            );
            $item->addOption(
                array(
                     'code'  => 'additional_options',
                     'value' => serialize($additionalOptions),
                )
            );
        }
    }

यहाँ इस विषय के बारे में अधिक जानकारी दी गई है:

/programming/9334115/magento-change-custom-option-value-before-adding-it-to-cart/9344336#9344336

और अधिक:

/programming/9412074/magento-quote-order-product-item-attribute-based-on-user-input/9496266#9496266


1
पहला: कृपया नए उत्तरों के बजाय टिप्पणियों का उपयोग करें। और फिर लूप में अपने उत्पाद के लिए एक चेक डालें, इसलिए केवल आपके वांछित उत्पाद का विकल्प मिलता है।
फेबियन ब्लेसश्मिड

1
कृपया इस महान डिबगिंग उत्तर पर एक नज़र डालें और टिप्पणी करें: magento.stackexchange.com/a/429/217
Fabian

1
यह ऊपर वर्णित चरणों के साथ संभव है
फेबियन ब्लेच्च्मिड्ट 12

2
सुझाव के लिए धन्यवाद जब मैं कार्ट में जोड़ता हूं तो मुझे दो आइटम मिले क्योंकि मैं कॉन्फ़िगर करने योग्य उत्पाद का उपयोग कर रहा हूं और मैंने अंतिम उद्धरण आइटम को अपडेट करके समस्या को हल कर दिया है।
मिलापले इंक।

1
मुझे न तो, लेकिन मैंने लिंक को अपडेट किया। धन्यवाद!
फेबियन ब्लेसश्मिट

3

मक्खी पर कस्टम विकल्प जोड़ने के लिए ऐपप्रोटिएट इवेंट है catalog_product_type_prepare_full_options, जो उत्पाद से ठीक पहले ट्रिगर होता है , जिसके कस्टम विकल्प एक उद्धरण आइटम में परिवर्तित हो जाते हैं।

क्या स्वयं के खरीद-फरोख्त के आंकड़ों का उत्पाद विशेषताओं या विकल्पों पर प्रभाव पड़ता है, घटना पर एक पर्यवेक्षक catalog_product_type_prepare_{$processMode}_optionsएक अच्छा विकल्प है, जहां $processModeसत्यापन मोड है और “पूर्ण” या ite लाइट ”हो सकता है। Regularly पूर्ण ”मोड का उपयोग तब किया जाता है जब एक उत्पाद को नियमित रूप से कार्ट में जोड़ा जाता है और यह सत्यापित करता है कि सभी आवश्यक विकल्प सेट किए गए हैं और संपूर्ण कॉन्फ़िगरेशन मान्य है। The लाइट ”मोड में केवल अनुरोध में निहित विकल्प ही मान्य हैं, इसका उपयोग इच्छा सूची में उत्पाद जोड़ने के दौरान किया जाता है, लेकिन बैकएंड से ऑर्डर बनाते समय भी संभव है। किसी भी मामले में डेटा को संसाधित करने के लिए आप दोनों घटनाओं के लिए पर्यवेक्षक को पंजीकृत कर सकते हैं। क्या सत्यापन होना चाहिए आपको पाठ्यक्रम की घटनाओं में अंतर करना चाहिए।

ईवेंट्स Mage_Catalog_Model_Product_Type_Abstract :: _ readyOptions () और निम्न पैरामीटर उपलब्ध हैं:

  • transport: सभी कस्टम विकल्पों के लिए परिवहन वस्तु (लेकिन कोई अन्य विकल्प, उदाहरण के लिए बंडल विकल्प), इसलिए आप उन्हें पर्यवेक्षक में बदल सकते हैं। परिवहन-> विकल्प विकल्प में एक सरणी है जो विकल्प_ड => विकल्प_वायु है। ध्यान दें, परिवहन स्वयं एक stdClass वस्तु है, न कि Varien_Object का उदाहरण, जैसा कि आप उम्मीद कर सकते हैं। तो परिवहन के लिए कोई गेट्टर और सेटर विधियां नहीं हैं-> विकल्प।
  • buy_request: BuyRequest ऑब्जेक्ट, आप इसे यहाँ पढ़ सकते हैं और अभी भी इसे संशोधित कर सकते हैं।
  • product: वह उत्पाद जिसे बाद में एक उद्धरण आइटम में बदल दिया जाएगा। यहां आप विशेषताओं में हेरफेर कर सकते हैं या उन्हें गतिशील रूप से जोड़ सकते हैं। लेकिन आपको अभी भी रूपांतरण प्रक्रिया में उन पर विचार करने की आवश्यकता है। इसके लिए उपयोग किया जाने वाला ईवेंट sales_quote_product_add_afterकेवल बाद में चालू हो जाता है।

स्रोत: द मैगेंटो रियरेस्टेस्ट ऑब्जेक्ट - एक संदर्भ

तो एक पर्यवेक्षक इस तरह दिख सकता है:

public function addCustomOption(Varien_Event_Observer $observer)
{
    $transport = $observer->getTransport();
    if (this_item_should_be_free()) { // implement your condition here
        $transport->options['Free Gifts'] = 'Spend $50 and get gift product worth $9.99';
    }
}

आप इस गतिशील रूप से जोड़े गए कस्टम विकल्प के लिए कोई मूल्य निर्धारित नहीं कर सकते हैं, लेकिन आप catalog_product_get_final_priceइस तरह से एक दूसरे पर्यवेक्षक का उपयोग करके उद्धरण आइटम की कीमत को बदल सकते हैं :

public function adjustFinalPrice($observer) {

    $product = $observer->getProduct();
    // Set price to "0" if custom option "Free Gift" has been set
    if ($product->getCustomOption('Free Gift')) {
        $product->setFinalPrice(0);
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.