[英]How to add custom field to order in 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表中。 我還將此添加到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>
當我下訂單時,自定義字段將不會保存。 如何使它工作? 我已經用這種方式向客戶添加了一些自定義字段,它們工作正常。 我還可以在admin / customer上自動查看我的自定義客戶字段,但無法在admin / sales_order中看到我的自定義訂單字段。 謝謝
*編輯:
這就是我所做的:
我將observer.php添加到companyname / module / model / 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";
}
}
這是我的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>
我認為我的觀察者有一些問題。 我認為這不是解雇。
*編輯:
我的觀察員現在正在工作。 文件名必須是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 / model / obsever.php文件中添加:
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);
}
}
您可以添加一些事件觀察器來捕獲報價保存和加載事件。 將以下代碼插入<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/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.