0

顧客アカウント登録ページに国の別のドロップダウンリストを追加したいのですが、試しました

<?php echo $this->getCountryHtmlSelect() ?>

しかし、これはドロップダウンを表示しません。私が試したもう1つは

<select name="partner_country" id="partner_country">
    <option value=''>– Please Select –&lt;/option>
        <?php foreach($_countries as $_country): ?>
            <option value="<?php echo $_country->getId() ?>"><?php echo $_country->getName() ?></option>
        <?php endforeach; ?>
</select>

これは国リストを表示しますが、選択した国はバックエンドの顧客情報ページに表示されません。

国のレンダリングドロップダウンを知っgetCountryHtmlSelect()ています。選択した国を保存するために、モジュールに同様のメソッドを作成しましたか?

アップデート

セットアップスクリプトを介してこの属性を追加するときに、すでにソースモデルを作成しました。

$installer->addAttribute('customer_address','partner_country_id',array(
        'type'               => 'varchar',
        'label'              => 'Partner Country',
        'input'              => 'select',
        'source'             => 'wholesale/attribute_source_partnercountry',
        'global' => 1,
        'visible' => 1,
        'required' => 0,
        'visible_on_front' => 1,
        'sort_order'=>220
));

ソースモデル

class Company_Wholesale_Model_Attribute_Source_Partnercountry extends Mage_Eav_Model_Entity_Attribute_Source_Table
{
    public function getAllOptions()
    {
        if (!$this->_options) {
            $this->_options = Mage::getResourceModel('directory/country_collection')
                ->loadByStore($this->getAttribute()->getStoreId())->toOptionArray();
        }
        return $this->_options;
    }

}

config.xml

<config>
    <global>
        <resources>
            <wholesale_setup>
                <setup>
                    <module>Company_Wholesale</module>
                    <class>Company_Wholesale_Model_Entity_Setup</class>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </wholesale_setup>
        </resources>
    </global>
</config>
4

2 に答える 2

2

発生している問題は、作成した属性のタイプに関連しています。管理者でカスタム属性を選択できるようにするには、タイプ「select」および「source_model」でカスタム属性を作成/更新する必要があります。この目的のために、顧客モジュールセットアップモデルの使用が必要であるため、セットアップリソースのモジュール構成でそれを指定する必要があります。

<config>
   <global>
       <resources>
           <your_module_setup>
               <setup>
                  <class>Mage_Customer_Model_Resource_Setup</class>
                  <module>Your_Module</module>
               </setup>
           </your_module_setup>
       </resources>
    </global>
</config>

また、セットアップファイルで、属性を作成/変更する必要があります。(属性が存在する場合、現在のコードスニペットは作成ではなく属性を変更します)。

<?php

$this->startSetup();
$this->addAttribute('customer', 'partner_country' , array(
     'type'   => 'varchar',
     'label'  => 'Partner Country',
     'input'  => 'select',
     'source' => 'customer/entity_address_attribute_source_country'
));
$this->endSetup();

更新しました:

質問がありましたが、顧客作成アカウントフォームに属性を追加していないため、アカウント作成プロセス中に顧客モデルに設定されたデータから属性が除外されます。

したがって、属性を保存できるフォームの顧客属性を指定するだけです。

現在、そのようなフォームが利用可能です。

  • customer_account_create-登録フォーム
  • customer_account_edit-アカウント詳細フォームの変更
  • checkout_register-チェックアウト中に新しいアカウントを登録します

カスタム属性をフォームに追加するには、もう1つのセットアップスクリプトを作成します。このスクリプトは、フォームコードと属性IDを含むレコードを次のテーブルに追加しますcustomer/form_attribute

<?php
$this->startSetup();
$attributeId = $this->getAttributeId('customer', 'partner_country_id');
$data = array(
    array('attribute_id' => $attributeId, 'form_code' => 'customer_account_create'),
    array('attribute_id' => $attributeId, 'form_code' => 'customer_account_edit'),
    array('attribute_id' => $attributeId, 'form_code' => 'checkout_register')
);
$this->getConnection()->insertMultiple($this->getTable('customer/form_attribute'), $data);
$this->endSetup();

不要なフォームをオプトアウトするだけです。

于 2012-07-23T07:00:35.670 に答える
1

を使用する場合は、デフォルトgetCountryHtmlSelect()ではなく、属性に適用できるように、いくつかのパラメーターを指定する必要がありcountryます。登録フォームの場合、次のようになります。

echo $this->getCountryHtmlSelect($this->getFormData()->getPartnerCountryId(), 'partner_country_id', 'partner_country', $this->__('Partner Country'))

2番目の例では、属性partner_countryを作成したのに対し、名前の選択で使用します。partner_country_id

于 2012-07-23T08:17:21.113 に答える