2009-10-06 41 views
6

के मानों को पूर्ववत करने के लिए कैसे करें मैं एक ग्राहक के लिए एक Magento दुकान बना रहा हूं और ड्रॉपडाउन सूची के रूप में कार्य करने वाले सभी उत्पादों में एक विशेषता जोड़ना चाहता हूं। 'निर्माता' विशेषता की तरह।Magento: किसी उत्पाद की ड्रॉपडाउन विशेषता

हालांकि, विशेषता के लिए मानों की सूची में मैन्युअल रूप से प्रवेश करने की बजाय मैं मान को बाहरी साइट से पॉप्युलेट करना चाहता हूं। इसलिए, हर बार जब आप कोई नया उत्पाद बनाते हैं या किसी मौजूदा को संपादित करते हैं, तो ड्रॉपडाउन को उन दूरस्थ मानों की अद्यतित सूची के साथ पॉप्युलेट किया जाता है जिन्हें दूरस्थ साइट से पुनर्प्राप्त किया गया है। सूची को केवल एक बार विशेषता के निर्माण के दौरान नहीं लाया जाना चाहिए, लेकिन हर बार जब कोई उत्पाद बनाया या संपादित किया जाता है।

उदाहरण के लिए, मान लीजिए कि आप रिमोट साइट से कर्ल के माध्यम से सभी निर्माताओं की एक सूची प्राप्त कर सकते हैं। इस सूची में नाम कभी-कभी संशोधित या जोड़े जाते हैं, हालांकि आईडी का वही रहता है ताकि उन्हें दृश्यों के पीछे उपयोग किया जाना चाहिए। आप निर्माता के ड्रॉपडाउन के मूल्यों को कैसे पूर्ववत करेंगे?

मुझे पता है कि बुनियादी कस्टम एक्सटेंशन कैसे बनाएं, लेकिन adminhtml बैकएंड को विस्तारित करना मेरे लिए नई चीजें है।

किसी भी मदद की सराहना की जाती है।

+0

एक उत्तर स्वीकार करें? – ColinM

+0

@ कोलिमिन ओप्स। किया हुआ। :) –

उत्तर

10

Magento उत्पाद विशेषताओं अत्यंत लचीला हैं, लेकिन प्रति उत्पाद गतिशील मूल्य होने का मतलब यह होगा कि आपको प्रति उत्पाद एक विशेषता की आवश्यकता होगी जो अधिक समझ में नहीं आता है, इसलिए मुझे लगता है कि ये विशेषता मान आपके उत्पादों में कुछ चीजों को साझा करते हैं स्टोर करें ताकि आपके पास सीमित संख्या में गुण हों (या एक?)। इस तरह की प्रत्येक विशेषता के लिए आपको इसके लिए विशेषता और बैकएंड मॉडल बनाना चाहिए और फिर क्रॉन जॉब या ईवेंट का उपयोग अपने एपीआई से विशेषता मूल्य विकल्प अपडेट करें और डेटाबेस या किसी अन्य विधि में उन्हें स्थानीय रूप से कैश करें। आप इस तरह अपने मॉड्यूल संस्थापक में एक विशेषता जोड़ सकते हैं:

$installer->addAttribute('catalog_product', 'my_attr_code', array(
    'label' => 'Attribute Name', 
    'required' => false, 
    'input' => 'select', 
    'source' => 'namespace/source', 
    'default' => 'none', 
    'position' => 1, 
    'sort_order' => 3, 
)); 

या eav_attribute तालिका के लिए अपने स्वयं के एसक्यूएल डालने बयान रोल। बैकएंड में सेट की गई विशेषता में अपनी नई विशेषता असाइन करना सुनिश्चित करें ताकि यह आपके उत्पादों के साथ उपयोग योग्य हो।तो फिर तुम My_Namespace_Model_Source जो Mage_Eav_Model_Entity_Attribute_Source_Table (यह मानते हुए आप अपनी विशेषता मानों के लिए एक चयन इनपुट चाहते हैं) प्रदान करता है और कम से कम लागू करता है निम्न विधियों में एक मॉडल बनाने:

getAllOptions() 
getOptionText($value) 

तो इन गतिशील विकल्प है कि स्थानीय रूप से कैश कर रहे हैं से खींच जाएगा और अधिकांश भाग के लिए आपकी नई विशेषता Magento में किसी अन्य की तरह व्यवहार करेगी। बुद्धिमान कैशिंग का उपयोग करना सुनिश्चित करें क्योंकि इन विधियों को एक पृष्ठ लोड में कई बार संभावित रूप से मारा जा सकता है। एक ऐसी घटना हो सकती है जिसे आप देख सकते हैं जिसे उत्पाद बनाने या संपादित करने से पहले सही कहा जाता है, अन्यथा केवल कक्षा या नियंत्रक को ओवरराइड करें या मैगेंटो क्रॉन कार्य का उपयोग करें।

संपादित करें: आप मौजूदा Magento विशेषता मॉडल का भी उपयोग कर सकते हैं और मौजूदा एपीआई के माध्यम से अपना विकल्प मान बना सकते हैं, लेकिन मुझे लगता है कि सिंक्रनाइज़ करने के लिए या किसी अन्य कारण से आपको कुछ अतिरिक्त मेटाडेटा की आवश्यकता हो सकती है, जिस स्थिति में आप चाहते हैं एक कस्टम बैकएंड मॉडल।

4

मुझे कोई अच्छा जवाब नहीं लगता है, लेकिन यहां जाता है, मैं पहले एक विशेषता जोड़ता हूं और फिर यह देखने के लिए अभियंता रिवर्स करता हूं कि यह कैसे आबादी है।

तो व्यवस्थापक पर उत्पाद प्रदर्शन पेज में, मैं productController के संपादन और नए कार्यों, उस विशेषता के लिए कर्ल का उपयोग कर मूल्यों लोड करने के लिए ओवरराइड होगा (आप eav_attribute तालिका में विशेषता के आईडी देखने के कर सकते हैं)

फिर आप इसे कस्टम एक्सटेंशन के रूप में पैकेज कर सकते हैं, इसलिए आप सीधे कोर कोड संपादित नहीं करते हैं। सौभाग्य!

4

आपको Magento इवेंट डिस्पैचर्स को देखने की आवश्यकता है।

असल में, हर बार एक घटना होती है - एक उत्पाद अपडेट करना, ऑर्डर सबमिट करना, कुछ हटाना आदि - सिस्टम के माध्यम से एक संदेश भेजा जाता है। इन संदेशों को पकड़ा जा सकता है और फिर आपके द्वारा बनाए गए तरीकों को ट्रिगर कर सकते हैं। जो भी आप चाहते हैं उसे प्राप्त करने के लिए, आपको उस ईवेंट को पकड़ने की आवश्यकता होगी जो किसी उत्पाद को बनाए और अपडेट किए जाने पर ट्रिगर किया जाता है और इसे अपने कस्टम मॉड्यूल में से किसी एक विधि को चलाने के लिए प्राप्त किया जाता है। इस विधि को दूरस्थ साइट से मूल्य प्राप्त होगा और उसके साथ उत्पाद अपडेट करेगा।

http://blog.baobaz.com/en/tag/magento-events

आप पा सकते हैं क्या Magento घटनाओं उचित मॉड्यूल कोड को देखकर ट्रिगर कर रहे हैं:

एक त्वरित गूगल खोज के बाद, मैं निम्न आलेख पाया।

संबंधित मुद्दे