2012-06-19 34 views
6

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

उत्तर

15

पूरे समाधान प्राप्त करने के लिए यहां कई कदम आवश्यक हैं।

सबसे पहले, एक नया मॉड्यूल बनाएं। यदि आप चाहें तो ModuleCreator का उपयोग करें।

फिर, Magento की विशेषता संरचना में नए फ़ील्ड जोड़ने के लिए अपने मॉड्यूल में setup script लिखें, उदा। :

$setup = new Mage_Sales_Model_Mysql4_Setup('core_setup'); 
$setup->startSetup(); 

$setup->addAttribute('quote', 'my_attribute', array('type' => 'varchar', 'visible' => false, 'required' => false)); 
$setup->addAttribute('order', 'my_attribute', array('type' => 'varchar', 'visible' => false, 'required' => false)); 
$setup->addAttribute('invoice', 'my_attribute', array('type' => 'varchar', 'visible' => false, 'required' => false)); 
$setup->addAttribute('creditmemo', 'my_attribute', array('type' => 'varchar', 'visible' => false, 'required' => false)); 

नोट Mage_Sales_Model_Mysql4_Setup के उपयोग प्रासंगिक sales_flat_quote और sales_flat_order तालिकाओं के लिए फ़ील्ड्स जोड़ने के लिए।

अब, अपने मॉड्यूल के config.xml फ़ाइल में निम्न मान सम्मिलित करें:

<global> 

    <fieldsets> 
     <sales_convert_quote> 
      <my_attribute> 
       <to_order>*</to_order> 
      </my_attribute> 
     </sales_convert_quote> 
     <sales_convert_order> 
      <my_attribute> 
       <to_cm>*</to_cm> 
       <to_invoice>*</to_invoice> 
      </my_attribute> 
     </sales_convert_order> 
    </fieldsets> 

कि Magento हिदायत बोली से अपने कस्टम फ़ील्ड के मूल्यों की प्रतिलिपि करने के होगा चालान और credit_memo को ऑर्डर करने के लिए, आदि

फिर अपने कस्टम ब्लॉक/नियंत्रक कोड में, आप मूल्यों को बनाए रखने के लिए Magento के जादू गेटर्स और सेटर्स का उपयोग करने में सक्षम होंगे।

$oQuote = Mage::getSingleton('checkout/session')->getQuote(); 
$oQuote->setMyAttribute('some_value'); 
$oQuote->save(); 

आप sales_flat_quote में बचाया नया स्तंभ और मूल्य देखना चाहिए। फिर ग्राहक एक बार चेकआउट पूरा करने के बाद, उसी मान को sales_flat_order में सहेजा जाना चाहिए।

ध्यान दें कि उपरोक्त कोड सिर्फ quote बदलते quote_item आदि करने के लिए, हालांकि, अगर आप मूल्यों है कि अपने उत्पादों पर स्थापित किए गए हैं विशेषता सहेजना चाहते हैं द्वारा quote_item और order_item के लिए काम करने के लिए बढ़ाया जा सकता है, तो कुछ अतिरिक्त काम की आवश्यकता है।

(वैश्विक नोड के अंदर फिर से) अपने config.xml में एक्सएमएल का एक नया ब्लॉक सम्मिलित करें:

<sales> 
     <quote> 
      <item> 
       <product_attributes> 
        <my_attribute /> 
       </product_attributes> 
      </item> 
     </quote> 
    </sales> 

कहाँ my_attribute उत्पाद मॉडल पर विशेषता कोड है। यही कारण है कि my_attribute जुड़ा हुआ उत्पाद पर उपलब्ध हो जाएंगी, ताकि आप एक पूर्ण Mage::getModel('catalog/product')->load($oQuoteItem->getProductId()) प्रदर्शन करने की जरूरत के बिना

$oQuoteItem->getProduct()->getMyAttribute() 

के माध्यम से पहुँच सकते हैं। यह बहुत अधिक कुशल है।

फिर, आपको उत्पाद ऑब्जेक्ट से मूल्यों को कॉपी करने के लिए पर्यवेक्षक की आवश्यकता होगी quote_item ऑब्जेक्ट पर। तो, config.xml में अपने पर्यवेक्षक की घोषणा:

<events> 
     <sales_quote_item_set_product> 
      <observers> 
       <quoteitem_set_custom_data> 
        <type>singleton</type> 
        <class>mymodule/observer</class> 
        <method>setCustomDataOnQuoteItem</method> 
       </quoteitem_set_custom_data> 
      </observers> 
     </sales_quote_item_set_product> 
    <events> 

और इस तरह अपने पर्यवेक्षक कक्षा में कोड लिखने:

public function setCustomDataOnQuoteItem($oObserver){ 
    $oProduct = $oObserver->getProduct(); 
    $oQuoteItem = $oObserver->getQuoteItem(); 
    foreach(array('my_attribute') as $vAttributeCode){ 
     $oQuoteItem->setData($vAttributeCode,$oProduct->getData($vAttributeCode)); 
    } 
} 
+0

क्यों कोई नहीं के रूप में स्पष्ट और पूर्ण तुमने किया था के रूप में एक ब्लॉग पोस्ट पैदा नहीं करता है ?? मैंने आपके उत्तर की तलाश में 2 घंटे बिताया! धन्यवाद ! – LittleBigDev

0

यहां एक संपूर्ण काम कर रहे मॉड्यूल है .. इसकी (लगभग) के रूप में ही जॉनटन के उपरोक्त कोड। आप इसे यहाँ मिलेगा: https://bitbucket.org/vovsky/adding-custom-product-attribute-to-quote-and-order-items-in/

और यहाँ हर कदम का पूरा विवरण: http://www.atwix.com/magento/custom-product-attribute-quote-order-item/

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