Обновление / редактирование опции атрибута в Magento - PullRequest
2 голосов
/ 01 сентября 2011

У меня есть атрибут с именем "vendor_id".У меня есть N продуктов, которые имеют "vendor_id" в качестве атрибута продукта.Параметры для атрибута «vendor_id» создаются программно, когда администратор добавляет новую сущность «vendor».Код выглядит так:

    public function saveAction()
    {
    $data = $this->getRequest()->getPost();
    $designerName = $data['title'];

    $product = Mage::getModel('catalog/product');
    $attributes = Mage::getResourceModel('eav/entity_attribute_collection')
            ->setEntityTypeFilter($product->getResource()->getTypeId())
            ->addFieldToFilter('attribute_code', 'vendor_id')
            ->load(false);
    $attribute = $attributes->getFirstItem()->setEntity($product->getResource());
    $myresults = array ('value'=> array('optionone'=>array($designerName))); 

    $attribute->setData('option',$myresults);
    $attribute->save(); 

И сейчас это работает.Он создаст опцию для атрибута «vendor_id», и когда пользователь добавляет новый продукт (или редактирует существующий продукт), выпадающий список «vendor_id» будет заполнен этими объектами «vendor», которые мы создали в saveAction.() метод.

Теперь, если администратор хочет отредактировать существующую опцию атрибута, я не хочу создавать новую опцию, я хочу отредактировать существующую.Важно, чтобы идентификатор опции оставался неизменным при изменении имени / метки.

Я подключил newAction для установки статической переменной, поэтому в saveAction () мы можем проверить и посмотреть, редактируем ли мыили создание новой опции:

    if (null == MyController::$_editScope)
    {
        error_log('Need to update option attribute');
        $attribute->addData($myresults);
    }

Проблема в том, что метод addData () делает именно это, добавляет данные, но не обновляет существующие.Атрибут:

    $attribute = $attributes->getFirstItem()->setEntity($product->getResource());

Который является экземпляром: http://docs.magentocommerce.com/Mage_Eav/Mage_Eav_Model_Entity_Attribute.html

Который имеет 3 родительских класса, и я просмотрел их все для метода, который позволит мне редактировать* или обновить * имя существующей опции ...

1 Ответ

3 голосов
/ 03 мая 2012

Вы можете найти это полезным. Смотрите подробности здесь .

//Get the eav attribute model
$attr_model = Mage::getModel('catalog/resource_eav_attribute');

//Load the particular attribute by id
//Here 73 is the id of 'manufacturer' attribute
$attr_model->load(73);

//Create an array to store the attribute data
$data = array();

//Create options array
$values = array(
    //15 is the option_id of the option in 'eav_attribute_option_value' table
    15 => array(
            0 => 'Apple'    //0 is current store id, Apple is the new label for the option
        ),
    16 => array(
            0 => 'HTC'
        ),
    17 => array(
            0 => 'Microsoft'
        ),
);

//Add the option values to the data
$data['option']['value'] = $values;

//Add data to our attribute model
$attr_model->addData($data);

//Save the updated model
try {
    $attr_model->save();
    $session = Mage::getSingleton('adminhtml/session');
    $session->addSuccess(
        Mage::helper('catalog')->__('The product attribute has been saved.'));

    /**
     * Clear translation cache because attribute labels are stored in translation
     */
    Mage::app()->cleanCache(array(Mage_Core_Model_Translate::CACHE_TAG));
    $session->setAttributeData(false);
    return;
} catch (Exception $e) {
    $session->addError($e->getMessage());
    $session->setAttributeData($data);
    return;
}
...