2012-07-31 29 views
7

Tôi muốn thêm một trường tùy chỉnh mới vào một thanh toán trang trong Magento. Tôi đã tạo mô-đun với trình cài đặt:Làm cách nào để thêm trường tùy chỉnh để đặt hàng trong 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(); 

Tôi có thể xem bằng phpmyadmin rằng trường này đã được thêm vào bảng mage_eav_attribute. Tôi cũng đã thêm thông tin này vào 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> 

Khi tôi đặt hàng, trường tùy chỉnh sẽ không lưu. Làm thế nào để làm cho nó hoạt động? Tôi đã thêm một số trường tùy chỉnh cho khách hàng theo cách này và chúng hoạt động tốt. Tôi cũng có thể tự động thấy các trường khách hàng tùy chỉnh của mình trên quản trị viên/khách hàng nhưng không thể thấy trường đơn hàng tùy chỉnh của tôi trong admin/sales_order. Cảm ơn bạn

* Edit:

Đây là những gì tôi đã làm:

tôi thêm observer.php để CompanyName/module/mô hình/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"; 
     } 
} 

Và đây là 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 nghĩ rằng có một số vấn đề với người quan sát của tôi. Tôi nghĩ nó không bắn.

* Edit:

quan sát của tôi là làm việc ngay bây giờ. Tên tệp phải là Observer.php, không phải là observer.php.

+0

bạn có thể chia sẻ đầy đủ mã.Đối tôi .Tôi phải bổ sung trong tab rà soát trật tự .. –

Trả lời

13

Thêm một người quan sát:

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

Và trong mymodule/savefield/mô hình/obsever.php tập thêm này:

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

tôi dường như không thể làm cho nó làm việc. – Joonas

+0

Tôi đã thêm thông tin vào câu hỏi của mình. – Joonas

+0

Nó hiện đang hoạt động và câu trả lời của bạn đã cho tôi thấy đúng hướng. Cảm ơn! – Joonas

0

Bạn có thể thêm một số nhà quan sát sự kiện để nắm bắt quote lưu và tải các sự kiện. Chèn mã sau vào mô-đun config.xml của bạn bên trong thẻ <global>.

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

Thêm trường tùy chỉnh vào trang thanh toán bao gồm một số bước và cần chỉnh sửa nhiều tệp. Để biết hướng dẫn từng bước hoàn chỉnh, hãy truy cập hướng dẫn sau đây.

http://www.demagento.com/tutorial-magento-add-custom-field-to-order-checkout-page/

Các vấn đề liên quan