2012-07-31 126 views
7

我想在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表中看到。我也添加到了航运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到公司名称/模块/模型/ 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"; 
     } 
} 

而这里的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认为我的观察者存在一些问题。我认为这不是射击。

* 编辑:

我的观察,现在的工作。文件名必须是Observer.php,而不是observer.php。

+0

你可以分享全code.for我。我必须在订单审核选项卡中添加.. – 2018-02-28 09:49:48

回答

13

添加观察员:

​​

而在mymodule中/ savefield /模型/ 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); 
    } 
} 
+1

我似乎无法使它工作。 – Joonas 2012-08-01 08:53:17

+0

我为我的问题添加了更多信息。 – Joonas 2012-08-01 09:01:16

+0

现在正在工作,你的回答给了我正确的方向。谢谢! – Joonas 2012-08-07 03:06:22

0

您可以添加一些事件观察家捕捉报价保存,并加载事件。将以下代码插入<global>标记中的模块​​3210文件中。

<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/

相关问题