मक्खी पर कस्टम विकल्प जोड़ने के लिए ऐपप्रोटिएट इवेंट है 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);
}
}