2012-07-31 85 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/

相關問題