Значение настраиваемого поля по умолчанию
Я определил атрибут lastname2
для customer и customer_address, он отображается правильно во всех формах, но когда я создаю новый адрес, он не "заполняется" значением клиента.
Есть какие-нибудь подсказки о том, как это сделать?
Определение моих полей:
$entityAttributes = array(
'customer'=>array(
'lastname2' => array(
'store_label'=>'Apellido Materno',
'label' => 'Apellido Materno',
'input' => 'text',
'type' => 'varchar',
//System = False and visible true = Show in 'customer_account_create', 'customer_account_edit', 'checkout_register'
'system'=>true,
'visible'=>true, //Watch out!! Only visible fields get processed by the form controllers!!!
'user_defined'=>false,
'used_in_forms' => array('adminhtml_customer', 'customer_account_edit', 'checkout_register','customer_account_create'),
'required' => 0,
'position' =>69
),),
'customer_address'=> array(
'lastname2' => array(
'store_label'=>'Apellido Materno',
'label' => 'Apellido Materno',
'input' => 'text',
'type' => 'varchar',
//System = False and visible true = Show in 'customer_account_create', 'customer_account_edit', 'checkout_register'
'system'=>false,
'visible'=>true, //Watch out!! Only visible fields get processed by the form controllers!!!
'user_defined'=>false,
'used_in_forms' => array('customer_account_create','customer_register_address','customer_address_edit','adminhtml_customer_address','adminhtml_customer'),
'required' => 0,
'position' =>49
),
),
);
# Install Attributes
foreach($entityAttributes as $entity=>$attributes)
{
foreach($attributes as $attribute_code=>$definition)
{
$installer->addAttribute($entity, $attribute_code, $definition);
/**
* @var Mage_Eav_Model_Config
*/
Mage::getSingleton('eav/config')
->getAttribute($entity, $attribute_code)
->setData('used_in_forms',$definition['used_in_forms'])
->save();
}
}
Мой config.xml (соответствующие выдержки, полная версия здесь)
<global>
<!-- [...] -->
<fieldsets>
<!-- @see http://www.excellencemagentoblog.com/customer-registration-fields-magento1-6 -->
<customer_account>
<lastname2>
<create>1</create>
<update>1</update>
<name>1</name>
<to_quote>customer_lastname2</to_quote>
<to_customer_address>lastname2</to_customer_address>
<to_customer_address>customer_lastname2</to_customer_address>
</lastname2>
</customer_account>
<customer_address>
<lastname2>
<to_quote_address>*</to_quote_address>
</lastname2>
</customer_address>
</fieldsets>
<!-- [...] -->
</global>
Редактировать: Это не автозаполнение браузера, я хочу повторить поведение из полей имя и фамилия, в которых по умолчанию отображаются имя и фамилия клиента (соответственно)
1 answers
Взгляните на блок Mage_Customer_Block_Address_Edit
это блок, который управляет редактированием адреса. Здесь вы заметите блок кода в функции _prepareLayout
, который устанавливает значения по умолчанию, если адрес не существует, поэтому для новых адресов.
$this->_address = Mage::getModel('customer/address');
// Init address object
if ($id = $this->getRequest()->getParam('id')) {
$this->_address->load($id);
if ($this->_address->getCustomerId() != Mage::getSingleton('customer/session')->getCustomerId()) {
$this->_address->setData(array());
}
}
if (!$this->_address->getId()) {
$this->_address->setPrefix($this->getCustomer()->getPrefix())
->setFirstname($this->getCustomer()->getFirstname())
->setMiddlename($this->getCustomer()->getMiddlename())
->setLastname($this->getCustomer()->getLastname())
->setSuffix($this->getCustomer()->getSuffix());
}
Затем позже при получении имени html этот объект адреса устанавливается против виджета, который будет использоваться для получения данных в шаблоне.
public function getNameBlockHtml()
{
$nameBlock = $this->getLayout()
->createBlock('customer/widget_name')
->setObject($this->getAddress());
return $nameBlock->toHtml();
}
И, наконец, эти значения используются в самом шаблоне app/design/frontend/base/default/template/customer/widget/name.phtml
.
<?php echo $this->escapeHtml($this->getObject()->getFirstname()) ?>
Таким образом, вам нужно будет либо подключиться к событию before html и внести изменения в объект адреса, либо переписать этот блок. В любом случае вам также потребуется изменить шаблон, чтобы включить в него ваши новые атрибуты.