Как я могу создать атрибут как "не настраиваемый" из сценария установки?
Когда я создаю выпадающий атрибут, Magento всегда устанавливает "Использовать для создания настраиваемого продукта" как Yes
.
В то время как в сценарии установки я добавил в массив опций метод Mage_Eav_Model_Entity_Setup::addAttribute()
:
"in_configurable" => false
Эта опция все еще не работает.
Пример кода для добавления атрибута из сценария установки:
$options = array(
'type' => 'int',
'label' => 'Color',
'input' => 'select',
'required' => false,
'user_defined' => true,
'searchable' => true,
'filterable' => true,
'comparable' => true,
'visible_in_advanced_search' => true,
'is_configurable' => false,
);
$this->addAttribute(
Mage_Catalog_Model_Product::ENTITY,
'size',
$options
);
После того, как я зайду в панель администратора и просмотрю данные атрибута, атрибут is_configurable
будет по-прежнему установлен как Yes
.
2 answers
Вам действительно следует использовать Mage_Catalog_Model_Resource_Setup::addAttribute()
вместо того, чтобы Mage_Eav_Model_Entity_Setup::addAttribute()
Как вы выяснили в коде, Mage_Eav_Model_Entity_Setup::addAttribute()
допускает только следующие опции:
Серверная часть
тип
таблица
интерфейс
ввод
метка
интерфейсный класс
источник
требуется
определяемый пользователем
по умолчанию
уникальный
примечание
глобальный
В то время как Mage_Catalog_Model_Resource_Setup::addAttribute()
допускает все вышеперечисленное, а также следующие опции:
Вход_рендерер
глобальный
видимый
доступный для поиска
фильтруемый
сопоставимый
видимый_он_фронт
wysiwyg_enabled
is_html_ разрешен_он_фронт
visible_in_ расширенный поиск
фильтруемой_в_сеарч
used_in_product_листинг
использованный_продукт_листинг
used_for_sort_by
применить к
должность
is_конфигурируемый
используемые_для_промо_рулей
Вы можете использовать этот класс, даже если вы определили другой класс настройки в своем config.xml
:
$installer = $this;
$installer->startSetup();
// Create your tables, etc
$catalogInstaller = Mage::getResourceModel('catalog/setup', 'catalog_setup');
$catalogInstaller->addAttribute(Mage_Catalog_Model_Product::ENTITY, 'size', array(
'type' => 'int',
'label' => 'Color',
'input' => 'select',
'required' => false,
'user_defined' => true,
'searchable' => true,
'filterable' => true,
'comparable' => true,
'visible_in_advanced_search' => true,
'is_configurable' => false,
));
$installer->endSetup();
Если вы пройдете через метод Mage_Eav_Model_Entity_Setup::addAttribute()
, вы можете обнаружить, что параметры фильтруются в методе Mage_Eav_Model_Entity_Setup::_prepareValues()
.
Метод _prepareValues
позволяет использовать только следующие параметры:
'backend_model', 'backend_type', 'backend_table', 'frontend_model',
'frontend_input', 'frontend_label', 'frontend_class',
'source_model', 'is_required', 'is_user_defined', 'default_value',
'is_unique', 'note', 'is_global'
Любой параметр, который необходимо установить и которого нет в предыдущем списке, не может быть передан в метод addAttribute
.
Единственным исключением из них являются: sort_order
, group
, user_defined
и option
. Они используются независимо от метода _prepareValues
.
Один из способов обойти это проблема заключается в обновлении атрибута после его создания с помощью метода Mage_Eav_Model_Entity_Setup::updateAttribute()
.
$this->updateAttribute(
Mage_Catalog_Model_Product::ENTITY,
'size',
'is_configurable',
false
)