我想在客户帐户注册页面添加另一个国家/地区下拉列表。我试过
<?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>
答案 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();
<强>更新:强>
现在我收到了您的问题,您尚未将您的属性添加到客户创建帐户表单,因此您的属性会从帐户创建过程中设置为客户模型的数据中过滤掉。
因此,您只需要为可以保存属性的表单指定客户属性。
目前有这样的表格:
要将自定义属性添加到表单,只需再创建一个安装脚本,即将包含表单代码和属性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
属性。