Как я могу создать атрибут как "не настраиваемый" из сценария установки?


Когда я создаю выпадающий атрибут, 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.

Author: Dan, 2014-10-07

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();
 3
Author: Sébastien, 2017-04-27 15:28:19

Если вы пройдете через метод 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
)
 5
Author: Dan, 2014-10-07 13:03:09