Импорт Значений Позиции Атрибута
Я знаю, что с помощью MAGMI мы можем импортировать в Magento намного проще. Например, если вы импортируете продукты со значением атрибута, которое еще не существует, оно будет создано MAGMI "на лету".
Однако я не нашел способа импортировать значение позиции атрибута.
Это приводит к тому, что атрибут создается на лету и выходит из строя.
Поскольку у меня более 300 различных значений, мне было интересно, есть ли способ импортировать мой атрибут а также значения позиций?
Это может быть с помощью MAGMI или любого другого метода.
Мы будем очень признательны за любую помощь!
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();
Я сделал это, и это определенно поможет вам.
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();
}