如何在 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 中添加自定义字段来订购?的主要内容,如果未能解决你的问题,请参考以下文章
woocommerce 自定义结帐字段以增加订购 ajax 的费用
从 magento 的自定义模块中添加 sales_flat_order_item 表中的新字段