如何在Magento中向订单添加自定义字段?

7

我希望在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>

当我下订单时,自定义字段无法保存。如何使其工作?我已经通过这种方式向客户添加了一些自定义字段,并且它们运行良好。我还可以在管理员/客户中自动查看我的自定义客户字段,但是在管理员/销售订单中无法查看我的自定义订单字段。谢谢。
*编辑:
这是我所做的:
我将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。


你能分享给我完整的代码吗?我需要添加到订单评论选项卡中。 - Ranganathan
1个回答

13

添加观察者:

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

我在我的问题中添加了更多信息。 - Joonas
现在它正在工作,并且您的答案给了我正确的方向。谢谢! - Joonas
2
$fieldVal来自哪里? - PBwebD
如何让它在管理员后台和订单中都显示出来? - OZZIE
每次客户下单后,我们都需要验证订单。我们的销售代表会一遍又一遍地确认相同的订单。因此,我是否可以在销售订单中添加自定义字段以进行验证?我该如何做呢? - Gem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接