How to add a custom order field in Magento?

I want to add one new custom field to one checkout page in Magento. I created a module with the installer:

$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(); 

With phpmyadmin, I see that the field has been added to the mage_eav_attribute table. I also added this to shipping-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> 

When I place an order, the custom field is not saved. How to make it work? So I added some custom fields for the client and they work fine. I can also see my custom customer fields automatically on admin / client, but I can’t see my custom order field in admin / sales_order. thanks

*Edit:

Here is what I did:

I added an observing .php to the name of the company / module / model / observer.

 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"; } } 

And here is 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 think there are some problems with my supervisor. I think this is not shooting.

*Edit:

My supervisor is working now. The file name should be Observer.php, not an observer .php.

+7
source share
2 answers

Add Observer:

 <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> 

And in mymodule / savefield / model / obsever.php file add this:

 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); } } 
+13
source

You can add some event observers to save saving quotes and load events. Paste the following code into the config.xml file of your module inside the <global> .

 <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> 

Adding custom fields to the checkout page consists of several steps and requires editing several files. For a complete walkthrough, visit the following tutorial.

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

0
source

All Articles