4

Magentoコアファイルを変更せずに、顧客登録フォームに携帯電話番号などのカスタムフィールドを作成するにはどうすればよいですか?試しましたが、携帯番号がDBに保存されていません

モジュールフォルダーにModel/Entity / Setup.phpを作成し、getDefaultEntitiesの配列に次のコードを追加して、Mage_Customer_Model_Entity_SetupクラスをMyown_Mage_Customer_Model_Entity_Setupでオーバーライドします。

'mobilenumber' => array(
                        'label'        => 'Mobile Number',
                        'visible'    => true,
                        'required'    => true,
                    ),

また、私の設定ファイルには次のコードが含まれています

<models>
        <customer_entity>
            <rewrite>
                  <customer>Myown_Mage_Customer_Model_Entity_Setup</customer>
            </rewrite>
        </customer_entity>
    </models>

また、template / customer / form/register.phtmlにこのフィールドがあります

<input type="text" name="mobilenumber" id="mobilenumber" value="<?php echo $this->htmlEscape($this->getFormData()->getMobilenumber()) ?>" title="<?php echo $this->__('Mobile Number') ?>" class="required-entry input-text" />  

この構成で見逃していることはありますか?携帯電話番号をDBに保存し、後で取得したい。

4

2 に答える 2

1

Enterprise の顧客用に同様のフィールド (この場合はreferred_by) を作成する必要があったため、その方法は次のとおりです。

まず、このすべての楽しみを収容するモジュールを作成しました。デフォルトの顧客に依存したり、不必要にモデルを書き直したりする必要がないように、顧客用に独自のエンティティ設定エントリを追加しました (時間が経つにつれて、書き直しで自分自身と競合し始めます)。あなたのエンティティ コードは機能しているように見えるので、それをリファクタリングするかどうかはあなた次第です。

次に、フィールドを顧客のフィールドセットに追加しました。これにより、Magento がデータベースに保存するデータを理解するのに役立つようです。

<global>
    <fieldsets>
        <customer_account>
            <referred_by>
                <create>1</create>
                <update>0</update>
                <to_order>customer_referred_by</to_order>
            </referred_by>
        </customer_account>
    </fieldsets> 
</global>

次に、上記と同様に、フィールドを顧客フォームに追加しました。チェックアウトでは、チェックアウト中にデータを保存するために、オーバーライド モデルをワンページ チェックアウトに追加する必要がありました (私の場合は、請求中のみ)。

class Company_Module_Model_Checkout_Type_Onepage extends Mage_Checkout_Model_Type_Onepage {
    public function saveBilling($data, $customerAddressId) {
        if (isset($data['referred_by'])) {
            // set referred for later use.
            $session    = Mage::getSingleton("customer/session");
            $session->setData("referred_by", $data['referred_by']);
        }

        return parent::saveBilling($data, $customerAddressId);
    }//end saveBilling
}

と:

<global>
    <models>
        <checkout>
            <rewrite>
                <type_onepage>Company_Module_Model_Checkout_Type_Onepage</type_onepage>
            </rewrite>
        </checkout>
    </models>   
</global>

その後、データはデータベースに正しく保存されました。万歳!

それが役立つことを願っています! ありがとう、ジョー

于 2010-10-01T14:53:00.977 に答える
0

あなたのコードについて:

  1. このクラスは顧客属性をインストールするためにのみ使用されるため、Mage_Customer_Model_Entity_Setup をオーバーライドする必要はありません。解決策は、Mage_Customer_Model_Entity_Setup から継承する独自のセットアップ クラスを用意することです。

  2. mysql4-install セットアップ ファイルも必要です。

新しい属性を顧客に追加する方法を正確に確認するには、私が作成したこの magento モジュールを参照してください: https://code.google.com/p/magento-code-snippets/source/browse/#svn/trunk/PWS_ExtCustomerFields

于 2010-10-02T10:02:35.253 に答える