如何在Magento中添加自定义字段以进行订购?
我想在Magento的一页结帐中添加一个新的自定义字段.我已经使用安装程序创建了一个模块:
I want to add one new custom field to one page checkout in Magento. I have created a module with 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();
我可以用phpmyadmin看到该字段已添加到mage_eav_attribute表中.我还将此添加到shipping-method.phtml中:
I can see with phpmyadmin that the field has been added to mage_eav_attribute table. I have 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>
下订单时,自定义字段不会保存.如何使其运作?我已经通过这种方式向客户添加了一些自定义字段,它们工作正常.我还可以在admin/customer上自动看到我的自定义客户字段,但是在admin/sales_order中却看不到我的自定义订单字段.谢谢
When I place an order, the custom field won't save. How to make it work? I have added some custom fields to customer with this way and they are working fine. I can also see my custom customer fields automatically on admin/customer but can't see my custom order field in admin/sales_order. Thank you
*
这就是我所做的:
我将observer.php添加到了companyname/module/model/observer.php
I added observer.php to 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:
And here's 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's some problem with my observer. I think it's not firing.
*
我的观察者正在工作.文件名必须是Observer.php,而不是observer.php.
My observer is working now. The filename must be Observer.php, not 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 文件中添加以下内容:
And in the 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);
}
}