Magento保存所选国家

时间:2012-07-18 10:38:52

标签: magento

我想在客户帐户注册页面添加另一个国家/地区下拉列表。我试过

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

但是这不显示下拉列表。我尝试的另一个是

<select name="partner_country" id="partner_country">
    <option value=''>– Please Select –</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>

2 个答案:

答案 0 :(得分: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 - 在结帐时注册新帐户

要将自定义属性添加到表单,只需再创建一个安装脚本,即将包含表单代码和属性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();

只需选择退出您不需要的表单即可。

答案 1 :(得分:1)

如果您想使用getCountryHtmlSelect(),那么您应该为其提供一些参数,以便它可以应用于您的属性,而不是默认情况下country。对于注册表单,它可以给出类似的结果:

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

在第二个示例中,您在选择名称中使用partner_country,而您创建了partner_country_id属性。