2012-07-31 12 views
7

मैं Magento में एक पेज चेकआउट में एक नया कस्टम फ़ील्ड जोड़ना चाहता हूं। मैं इंस्टालर के साथ एक मॉड्यूल बनाया है:Magento में ऑर्डर करने के लिए कस्टम फ़ील्ड कैसे जोड़ें?

$installer = $this; 
$installer->startSetup(); 
$setup = new Mage_Eav_Model_Entity_Setup('core_setup'); 

$setup->addAttribute('order', 'deliverydate', array(
    'position'  => 1, 
    'input'   => 'text', 
    'type'   => 'varchar', 
    'label'   => 'Choose delivery date', 
    'visible'  => 1, 
    'required'  => 0, 
    'user_defined' => 1, 
    'global'  => 1, 
    'visible_on_front' => 1, 
)); 

$installer->endSetup(); 

मैं phpmyadmin कि क्षेत्र तालिका mage_eav_attribute में जोड़ा गया है के साथ देख सकते हैं। मैंने इसे शिपिंग-method.phtml में भी जोड़ा है:

<div class="form-list field"> 
    <label for="deliverydate"><?php echo $this->__('Choose delivery date') ?></label> 
     <div class="input-box"> 
     <input type="text" name="deliverydate" id="deliverydate" title="<?php echo $this->__('deliverydate') ?>" class="input-text" /> 
    </div> 
</div> 

जब मैं ऑर्डर देता हूं, तो कस्टम फ़ील्ड सहेजा नहीं जाएगा। इसे कार्यशील कैसे करें? मैंने इस तरह से ग्राहक को कुछ कस्टम फ़ील्ड जोड़े हैं और वे ठीक काम कर रहे हैं। मैं अपने कस्टम ग्राहक फ़ील्ड को स्वचालित रूप से व्यवस्थापक/ग्राहक पर भी देख सकता हूं लेकिन व्यवस्थापक/sales_order में मेरा कस्टम ऑर्डर फ़ील्ड नहीं देख सकता। धन्यवाद

* संपादित करें:

मैं/मॉड्यूल/मॉडल/observer.php

class Company_Module_Model_Observer 
{ 
    public function Deliverydate($observer){ 
     //get event data 
     $event = $observer->getEvent(); 

       //get order 
     $order = $event->getOrder(); 

     //set the country here 
     $order->setDeliverydate('11.11.2012'); 
     //echo "observer"; 
     } 
} 

और यहाँ है CompanyName को observer.php कहा:

यह मैं क्या किया है है my config.xml:

<?xml version="1.0"?> 
<config> 
    <modules> 
    <Company_Module> 
     <version>0.1.0</version> 
    </Company_Module> 
    </modules> 
    <global> 
    <resources> 
    <Company_Module_setup> 
    <setup> 
     <module>Company_Module</module> 
     <class>Company_Module_Model_Resource_Mysql4_Setup</class> 
    </setup> 
    </Company_Module_setup> 
</resources> 
     <events> 
      <checkout_type_onepage_save_order> 
       <observers> 
        <Company_Module_Model_Observer> 
         <type>singleton</type> 
         <class>Company_Module_Model_Observer</class> 
         <method>Deliverydate</method> 
        </Company_Module_Model_Observer> 
       </observers> 
      </checkout_type_onepage_save_order> 
     </events> 
    </global> 
</config> 

I लगता है कि मेरे पर्यवेक्षक के साथ कुछ समस्या है। मुझे लगता है कि यह फायरिंग नहीं है।

* संपादित करें:

मेरे पर्यवेक्षक अब काम कर रहा है। फ़ाइल नाम observer.php होना चाहिए, observer.php नहीं।

<events> 
    <checkout_type_onepage_save_order> 
     <observers> 
      <Savefield_observer> 
       <type>singleton</type> 
       <class>mymodule/observer</class> 
       <method>Savefield</method> 
      </Savefield_observer> 
     </observers> 
    </checkout_type_onepage_save_order> 
</events> 

और mymodule/savefield/मॉडल/obsever.php फ़ाइल में इस जोड़ें::

+0

आप code.for मुझे आदेश समीक्षा टैब में जोड़ने के लिए मैं पूरी साझा कर सकता .. –

उत्तर

13

एक पर्यवेक्षक जोड़े

class Mymodule_Savefield_Model_Observer 
{ 
    public function Savefield($observer){ 
     //get event data 
     $event = $observer->getEvent(); 

     //get order 
     $order = $event->getOrder(); 

     //set the variable here 
     $order->setMyField($fieldVal); 
    } 
} 
+1

मैं यह काम कर नहीं कर पा रहे। – Joonas

+0

मैंने अपने प्रश्न के लिए और जानकारी जोड़ दी। – Joonas

+0

अब यह काम कर रहा है और आपके जवाब ने मुझे सही दिशा दिखायी है। धन्यवाद! – Joonas

0

आप पर कब्जा करने की किसी घटना पर्यवेक्षकों जोड़ सकते हैं बोली को बचाने , और घटनाओं को लोड करें। <global> टैग के अंदर अपने मॉड्यूल config.xml फ़ाइल में निम्न कोड डालें।

<events> 

<sales_quote_save_before> <!-- Event Called Before Quote Object is saved --> 

<observers> 

<save_before> 

<type>singleton</type> 

<class>Excellence_Custom_Model_Observer</class> <!-- Over Model Class --> 

<method>saveQuoteBefore</method> <!-- name of function --> 

</save_before> 

</observers> 

</sales_quote_save_before> 

<sales_quote_save_after> <!-- Event called After Quote Object is saved --> 

<observers> 

<save_after> 

<type>singleton</type> 

<class>Excellence_Custom_Model_Observer</class> <!-- Over Model Class --> 

<method>saveQuoteAfter</method> <!-- name of function --> 

</save_after> 

</observers> 

</sales_quote_save_after> 

<sales_quote_load_after> <!-- Event called when Quote Object is loaded --> 

<observers> 

<load_after> 

<type>singleton</type> 

<class>Excellence_Custom_Model_Observer</class> <!-- Over Model Class --> 

<method>loadQuoteAfter</method> <!-- name of function --> 

</load_after> 

</observers> 

</sales_quote_load_after> 

<sales_model_service_quote_submit_after> <!-- Event called after order placed --> 

<observers> 

<sales_model_service_quote_submit_after> 

<type>singleton</type> 

<class>Excellence_Custom_Model_Observer</class> <!-- Over Model Class --> 

<method>saveOrderAfter</method> <!-- name of function --> 

</sales_model_service_quote_submit_after> 

</observers> 

</sales_model_service_quote_submit_after> 

<sales_order_load_after> <!-- Event called after Order Object is loaded --> 

<observers> 

<sales_order_load_after> 

<type>singleton</type> 

<class>Excellence_Custom_Model_Observer</class> <!-- Over Model Class --> 

<method>loadOrderAfter</method> <!-- name of function --> 

</sales_order_load_after> 

</observers> 

</sales_order_load_after> 

</events> 

चेकआउट पृष्ठ पर कस्टम फ़ील्ड जोड़ना कई चरणों में शामिल है और कई फ़ाइलों को संपादित करने की आवश्यकता है। चरण-दर-चरण मार्गदर्शिका के लिए, निम्न ट्यूटोरियल पर जाएं।

http://www.demagento.com/tutorial-magento-add-custom-field-to-order-checkout-page/

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