如何在 Magento 中添加自定义字段来订购?

Posted

技术标签:

【中文标题】如何在 Magento 中添加自定义字段来订购?【英文标题】:How to add custom field to order in Magento? 【发布时间】:2012-07-29 01:40:15 【问题描述】:

我想在 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。

【问题讨论】:

你能分享完整的代码吗。对我来说。我必须在订单审查选项卡中添加.. 【参考方案1】:

添加观察者:

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

【讨论】:

我在我的问题中添加了更多信息。 它现在正在工作,您的回答为我指明了正确的方向。谢谢! $fieldVal 是从哪里来的? 你如何让它出现在管理员之后也在订单上? 每次我们需要在客户下订单后验证订单。我们的销售一次又一次地代表相同的订单。这样我就可以将自定义字段添加到销售订单中,例如验证。我该怎么做?

以上是关于如何在 Magento 中添加自定义字段来订购?的主要内容,如果未能解决你的问题,请参考以下文章

向 Magento 的订阅模块添加自定义字段

woocommerce 自定义结帐字段以增加订购 ajax 的费用

从 magento 的自定义模块中添加 sales_flat_order_item 表中的新字段

Magento签出页-添加自定义字段

Magento在admin中将自定义输入字段添加到客户帐户窗体

使用自定义文本将项目添加到 Magento 购物车