Импорт Значений Позиции Атрибута


Я знаю, что с помощью MAGMI мы можем импортировать в Magento намного проще. Например, если вы импортируете продукты со значением атрибута, которое еще не существует, оно будет создано MAGMI "на лету".

Однако я не нашел способа импортировать значение позиции атрибута.

Это приводит к тому, что атрибут создается на лету и выходит из строя.

Поскольку у меня более 300 различных значений, мне было интересно, есть ли способ импортировать мой атрибут а также значения позиций?

Это может быть с помощью MAGMI или любого другого метода.

Мы будем очень признательны за любую помощь!

Author: Raphael Rafatpanah, 2013-08-17

2 answers

Я не знаю, сильно ли это вам поможет, но я сделал что-то подобное, используя такой пользовательский скрипт.
В моем случае мне пришлось считывать значения из CSV-файла, но все идет до тех пор, пока вы можете получить свои данные в массив, который выглядит следующим образом:

$values = array(
    array(
        'value'=>'Some value',
        'position'=>'3'
    ),
    ....
);

Я также сделал это для атрибута manufacturer, но это работает для любого другого атрибута. Предположим, у вас есть массив в форме, описанной выше. Вот так:

$manufacturer = Mage::getModel('eav/config')->getAttribute('catalog_product', 'manufacturer'); //get the main attribute
$storeViews = Mage::getModel('core/store')->getCollection()->addFieldToFilter('store_id', array('gt'=>0)); //get all stores
$ids = $storeViews->getAllIds();//get all store ids
$saveOptions = array();//init options to save
if ($manufacturer){
    $_options = $manufacturer->getSource()->getAllOptions(false);//get all existing options so you won't add duplicates
    $options = array();
    foreach ($_options as $_option){ //format the existing options for save
        $options[$_option['label']] = $_option['value'];
    }
}
//read from the array to import $values
foreach ($values as $value){
    if (!isset($options[$name])){//check if the option does not exist
        $index = 'option_'.(count($toInsert) + 1);
        $toInsert[$index] = array();//if it doesn't exist add it to import array
        $toInsert[$index][0] = $value['value'];//set the option label for admin view
        foreach ($ids as $store){
           //empty values for stores - you can also set translated values if you need for each store
           $toInsert[$index][$store] = '';
        }
        $toInsertOrder[$index] = $value['position'];//set the option position
    }
}

Теперь у вас должно быть в массиве $toInsert метки, которые необходимо добавить, и в $toInsertOrder позиции меток. просто установите параметры для атрибута и сохраните его.

$result = array('value' => $toInsert,'order' => $toInsertOrder);
$manufacturer->setData('option', $result);
$manufacturer->save();
 2
Author: Marius, 2013-08-26 12:04:04

Я сделал это, и это определенно поможет вам.

function addOptionAttribute($arg_attribute, $arg_value,$arg_position) {
    $attribute_model = Mage::getModel('eav/entity_attribute');
    $attribute_options_model = Mage::getModel('eav/entity_attribute_source_table');

    $attribute_code = $attribute_model->getIdByCode('catalog_product', $arg_attribute);
    $attribute = $attribute_model->load($attribute_code);

    $attribute_options_model->setAttribute($attribute);
    $options = $attribute_options_model->getAllOptions(false);


    $attribute->setData('option', array(
        'value' => array(
            'option' => array($arg_value,$arg_value,$arg_value)
        ),
        'order'=> array(
            'option' => $arg_position
        )
    ));
    $attribute->save();
}
 0
Author: Sapnandu, 2015-09-03 10:01:11