2012-07-31 11 views
7

Magentoの1ページのチェックアウトに1つの新しいカスタムフィールドを追加したいとします。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(); 

フィールドが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

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

そしてだCOMPANYNAMEするobserver.php追加:

これは私がやっていることです私の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でなければなりません。保存引用

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

あなたは私が注文レビュー]タブに追加する必要があります.I code.forフルを共有... –

答えて

13

オブザーバを追加します。 、およびイベントをロードします。 <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/

+1

が、私はそれを動作させるように見えることはできませんでした。 – Joonas

+0

私は私の質問に多くの情報を追加しました。 – Joonas

+0

それは今働いていて、あなたの答えは私に正しい方向を示しました。ありがとう! – Joonas

0

あなたはキャプチャするために、いくつかのイベントオブザーバーを追加することができます。 ​​

そしてのmymodule/savefield /モデル/ obsever.phpファイルに

これを追加します。

関連する問題