Я хочу программно добавить новые значения параметров продукта в сценарий обновления данных моего модуля. Как я могу это сделать?
Я хочу программно добавить новые значения параметров продукта в сценарий обновления данных моего модуля. Как я могу это сделать?
Ответы:
Добавьте приведенный ниже код в файл скрипта обновления
<?php
$installer = new Mage_Eav_Model_Entity_Setup('core_setup');
$installer->startSetup();
$attributeCode = 'manufacturer';
$attribute = Mage::getModel('eav/entity_attribute')->loadByCode('catalog_product', $attributeCode);
if ($attribute->getId() && $attribute->getFrontendInput()=='select') {
$option['attribute_id'] = $attribute->getId();
$option['value'] = array('Red','Black', 'Yellow');
$installer->addAttributeOption($option);
}
//OR
/*
if($attribute->getId() && $attribute->getFrontendInput()=='select') {
$option['attribute_id'] = $attribute->getId();
$option['value']['r'][0] = 'Red';
$option['value']['b'][1] = 'Black';
$option['value']['y'][2] = 'Yellow';
$installer->addAttributeOption($option);
}*/
$installer->endSetup();
Проверьте дубликат кода значения опции:
<?php
$installer = new Mage_Eav_Model_Entity_Setup('core_setup');
$installer->startSetup();
$attributeCode = 'manufacturer';
$attribute = Mage::getModel('eav/entity_attribute')->loadByCode('catalog_product', $attributeCode);
if($attribute->getId() && $attribute->getFrontendInput()=='select') {
$newOptions = array('Red','Black', 'Yellow');
$exitOptions = array();
$options = Mage::getModel('eav/entity_attribute_source_table')
->setAttribute($attribute)
->getAllOptions(false);
foreach ($options as $option) {
if (in_array($option['label'], $newOptions)) {
array_push($exitOptions, $option['label']);
}else {
}
}
$insertOptions = array_diff($newOptions, $exitOptions);
if(!empty($insertOptions)) {
$option['attribute_id'] = $attribute->getId();
$option['value'] = $insertOptions;
$installer->addAttributeOption($option);
}
}
$installer->endSetup();
eav_attribute_option
получает одну новую строку, но без соответствующей строки в eav_attribute_option_value
. Должно быть что-то со $option
структурой массива.
попробуй это,
для одного значения: -
$arg_attribute = 'color';
$arg_value = 'red';
$attr_model = Mage::getModel('catalog/resource_eav_attribute');
$attr = $attr_model->loadByCode('catalog_product', $arg_attribute);
$attr_id = $attr->getAttributeId();
$option['attribute_id'] = $attr_id;
$option['value']['any_option_name'][0] = $arg_value;
$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$setup->addAttributeOption($option);
для нескольких значений: -
$arg_attribute = 'color';
$key_data = array('red','black','orange');
$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$attr_model = Mage::getModel('catalog/resource_eav_attribute');
$attr = $attr_model->loadByCode('catalog_product', $arg_attribute);
foreach($key_data as $key_value)
{
$option = array();
$arg_value = trim($key_value);
$attr_id = $attr->getAttributeId();
$option['attribute_id'] = $attr_id;
$option['value']['any_option_name'][0] = $arg_value;
$setup->addAttributeOption($option);
}
'any_option_name' будет color_name (например: red), arg_value будет его целочисленным optionId afaik.
Вещи, которые также должны быть получены в первую очередь, это то, что является следующим неиспользованным optionId. Будет использоваться для этой новой опции атрибута.
Например, вы хотите добавить Men
значение к gender
опции.
Сначала вы должны создать свой скрипт обновления в директории модуля, например app/code/local/MyCompany/MyModule/data/mymodule_setup/data-upgrade-0.1.0-0.1.1.php
.
Затем заполните его следующим кодом:
<?php
$this->startSetup();
$genderAttribute = Mage::getModel('eav/entity_attribute')
->loadByCode('catalog_product', 'gender'); // 'gender' is your attribute code
$this->addAttributeOption([
'attribute_id' => $genderAttribute->getId(),
'value' => [[0 => 'Men', 1 => 'Men', 10 => 'Men']] // array indexes are store IDs
]);
$this->endSetup();
Следующий код добавляет параметры атрибутов программно magento 1.
Пожалуйста, обратитесь к подробному объяснению, как читать из CSV и сравнить с существующими параметрами атрибута https://www.pearlbells.co.uk/add-attribute-options-magento-scripts/
function createAttribute( $options , $attributeCode) {
$option = array('attribute_id' =>
Mage::getModel('eav/entity_attribute')->getIdByCode(
Mage_Catalog_Model_Product::ENTITY,
$attributeCode
)
);
for ($i = 0; $i < count($options); $i++) {
$option['value']['option'.$i][0] = $options[ $i ]; // Store View
$option['value']['option'.$i][1] = $options[ $i ]; // Default store view
$option['order']['option'.$i] = $i; // Sort Order
echo 'Insert new option : '.$options[ $i ].PHP_EOL;
}
$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$setup->addAttributeOption($option);
}
'r'
,'b'
,'y'
в$option['value']['r'][0] = 'Red';
?