установите пользовательский атрибут раскрывающегося списка для клиента
Я создал пользовательский атрибут (выпадающий список) для клиента следующим образом:
$installer = $this;
$installer->startSetup();
$entityTypeId = (int)$installer->getEntityTypeId('customer');
$attributeSetId = (int)$installer->getDefaultAttributeSetId($entityTypeId);
$attributeGroupId = (int)$installer->getDefaultAttributeGroupId($entityTypeId, $attributeSetId);
$installer->addAttribute( $entityTypeId, 'customer_status', array(
'type' => 'int',
'label' => 'Customer Status',
'input' => 'select',
'forms' => array('adminhtml_customer'),
'source' => 'eav/entity_attribute_source_table',
'required' => false,
'visible' => 1,
'position' => 110,
'option' => array('values' => array('Inactive', 'Candidate', 'Certified')),
'default' => 'Inactive',
));
$installer->addAttributeToGroup($entityTypeId, $attributeSetId, $attributeGroupId, 'customer_status', 100);
$oAttribute = Mage::getSingleton('eav/config')->getAttribute('customer', 'customer_status');
$oAttribute->setData('used_in_forms', array('adminhtml_customer'));
$oAttribute->save();
$installer->endSetup();
Атрибут создан успешно, но:
- Когда я создаю нового клиента, значение по умолчанию равно нет, не
inactive
как в моем случае. Как я могу сделать неактивным значение по умолчанию. - Как я могу изменить значение этого атрибута программно?
Вопрос № 2 Ответ: Я пытался изменить значение атрибута с помощью текста опции. Копать глубже в это показывает, что выпадающий список имеет некоторое значение int для параметра, как показано ниже.
<select id="_accountcustomer_status" class=" select" name="account[customer_status]">
<option value=""></option>
<option selected="selected" value="241">Inactive</option>
<option value="242">Candidate</option>
<option value="243">Certified</option>
</select>
Итак, теперь, используя следующий код, я могу получить значение для требуемого параметра и сохранить его.
$attributeInfo = Mage::getResourceModel('eav/entity_attribute_collection')->setCodeFilter('customer_status')->getFirstItem();
$attributeOptions = $attributeInfo->getSource()->getAllOptions(false);
foreach($attributeOptions as $attr){
if($attr['label'] == 'Candidate'){
$statusValue = $attr['value'];
break;
}
}
$customer->setCustomerStatus($statusValue);
$customer->save();
1 answers
Вы не правильно создали Атрибут клиента .
Как вы создали раскрывающийся атрибут клиента, поэтому вам нужно определите исходную модель для этого атрибута.
"source" => "[module_Model_Prefix]/source_option",
В основном в этом исходном классе у вас есть опция определения для этого атрибута
Также необходимо удалить 'option' => array('values' => array('Inactive', 'Candidate', 'Certified')),
Класс источника
<?php
class [ModuleNameSpace]_[ModuleName]_Model_Source_Option extends Mage_Eav_Model_Entity_Attribute_Source_Abstract
{
/**
* Retrieve all options array
*
* @return array
*/
public function getAllOptions()
{
if (is_null($this->_options)) {
$this->_options = array(
array(
"label" => Mage::helper("eav")->__("Inactive"),
"value" => 1
),
array(
"label" => Mage::helper("eav")->__("Candidate"),
"value" => 2
),
);
}
return $this->_options;
}
/**
* Retrieve option array
*
* @return array
*/
public function getOptionArray()
{
$_options = array();
foreach ($this->getAllOptions() as $option) {
$_options[$option["value"]] = $option["label"];
}
return $_options;
}
/**
* Get a text for option value
*
* @param string|integer $value
* @return string
*/
public function getOptionText($value)
{
$options = $this->getAllOptions();
foreach ($options as $option) {
if ($option["value"] == $value) {
return $option["label"];
}
}
return false;
}