Создание нового атрибута не обновляет плоские данные продукта - PullRequest
1 голос
/ 08 октября 2010

Я пишу модуль импорта для импорта настраиваемых продуктов в magento, который работает довольно хорошо. Я настроил импорт так, чтобы он мог создавать все необходимые наборы атрибутов, атрибуты и параметры атрибутов, необходимые для создания настраиваемых продуктов. Пока все работает ... совсем все.

Когда при импорте создается новый атрибут, он не может создать настраиваемый продукт. Когда я редактирую новый атрибут в бэкэнде и сохраняю его без изменений, появляется сообщение, которое говорит мне обновить некоторые индексы. После того, как я обновил индекс данных продукта, я могу снова запустить импорт, и все работает нормально.

Я пытался создать новый атрибут:

$setup = new Mage_Catalog_Model_Resource_Eav_Mysql4_Setup('core_setup');    
$setup->addAttribute(
                $this->getEntityTypeId(),
                $code,
                array(
                    'attribute_code'            => $code,
                    'label'                     => ucfirst($code),
                    //'group'                   => $attributeSet->getId(),
                    'user_defined'              => 1,
                    'global'                    => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
                    'input'                     => 'select',
                    'unique'                    => 0,
                    'required'                  => 0,
                    'configurable'              => 1,
                    'filterable'                => 1,
                    'visible_on_front'          => 1,
                    'used_in_product_listing'   => 1,
                    'frontend_label'            => array(
                        $code
                    )
                )
            );

Другой способ:

$attribute = Mage::getModel("catalog/resource_eav_attribute");
        $attribute->addData(
            array(
                'entity_type_id'            => $this->getEntityTypeId(),
                'attribute_code'            => $code,
                'label'                     => ucfirst($code),
                //'group'                   => $attributeSet->getId(),
                'is_user_defined'           => 1,
                'is_global'                 => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
                'frontend_input'            => 'select',
                'is_unique'                 => 0,
                'is_required'               => 0,
                'is_configurable'           => 1,
                'is_filterable'             => 1,
                'is_visible_on_front'       => 1,
                'is_used_in_product_listing'=> 1,
                'frontend_label'            => array(
                    $code
                )
            )
        );

        $attribute->save();

Оба кода хорошо создают атрибут, но я не могу использовать его для создания настраиваемых атрибутов. Я пытался вручную запустить индексные сценарии, но это мне не помогло.

Что я делаю не так? Является ли создание новых атрибутов каким-то образом черной магией пурпурного? : -D

1 Ответ

0 голосов
/ 11 октября 2010

Я забыл установить тип бэкэнда для нового атрибута как «int», чтобы он автоматически устанавливался в статический (что означает, что magento ищет его в таблице сущностей).

Другое дело, что яНе удалось установить значение атрибута следующим образом:

$model->setData("newattributecode", 123);

Magento просто не сохранил атрибут.Вместо этого мне пришлось использовать недокументированную функцию Mage_Catalog_Model_Product::addAttributeUpdate(), чтобы сохранить значение атрибута этой модели:

$model->addAttributeUpdate("newattributecode", 123, 0);
...