簡體   English   中英

如何在Magento中添加自定義字段?

[英]How to add custom field to order in 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表中。 我還將此添加到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。

添加一個觀察者:

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

您可以添加一些事件觀察器來捕獲報價保存和加載事件。 將以下代碼插入<global>標記內的模塊config.xml文件中。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM