Добавить новые значения в атрибут атрибута в magento - PullRequest
7 голосов
/ 20 февраля 2011

Я пытаюсь добавить новые значения для атрибута option в magento, используя скрипт для ускорения процесса, так как у меня более 2000 производителей

Ответы [ 7 ]

17 голосов
/ 20 февраля 2011

Вот фрагмент кода, который я использовал для выполнения именно этой задачи.Создайте пользовательский модуль (используя ModuleCreator в качестве инструмента), а затем создайте mysql4-install-0.1.0.php в папке sql / modulename_setup.Он должен содержать следующее (адаптировано к вашим собственным данным, конечно же!).

$installer = new Mage_Eav_Model_Entity_Setup('core_setup');
$installer->startSetup();

$aManufacturers = array('Sony','Philips','Samsung','LG','Panasonic','Fujitsu','Daewoo','Grundig','Hitachi','JVC','Pioneer','Teac','Bose','Toshiba','Denon','Onkyo','Sharp','Yamaha','Jamo');
$iProductEntityTypeId = Mage::getModel('catalog/product')->getResource()->getTypeId();
$aOption = array();
$aOption['attribute_id'] = $installer->getAttributeId($iProductEntityTypeId, 'manufacturer');

for($iCount=0;$iCount<sizeof($aManufacturers);$iCount++){
   $aOption['value']['option'.$iCount][0] = $aManufacturers[$iCount];
}
$installer->addAttributeOption($aOption);

$installer->endSetup();    

Дополнительная документация на Magento wiki , если хотите.

Если выне хотите делать это в пользовательском модуле, вы можете просто создать php-файл, который начинается с:

require_once 'app/Mage.php';
umask(0);
Mage::app('default');
8 голосов
/ 03 мая 2012

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

$arg_attribute = 'manufacturer';
$manufacturers = array('Sony','Philips','Samsung','LG','Panasonic','Fujitsu','Daewoo','Grundig','Hitachi','JVC','Pioneer','Teac','Bose','Toshiba','Denon','Onkyo','Sharp','Yamaha','Jamo');

$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;
foreach ($manufacturers as $key=>$manufacturer) {
    $option['value'][$key.'_'.$manufacturer][0] = $manufacturer;
}

$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$setup->addAttributeOption($option);

Более подробную информацию можно найти здесь .

4 голосов
/ 18 апреля 2016

Я создал функцию для динамического добавления опции к атрибуту

public function addAttributeOptions($attributeCode, $argValue)
{
    $attribute = Mage::getModel('eav/config')
        ->getAttribute(Mage_Catalog_Model_Product::ENTITY, $attributeCode);


    if ($attribute->usesSource()) {

        $id = $attribute->getSource()->getOptionId($argValue);
        if ($id) 
            return $id;
    }

    $value = array('value' => array(
            'option' => array(
                    ucfirst($argValue),
                    ucfirst($argValue)
                )
        )
    );

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

    //return newly created option id
    $attribute = Mage::getModel('eav/config')
        ->getAttribute(Mage_Catalog_Model_Product::ENTITY, $attributeCode);
    if ($attribute->usesSource()) {
        return $attribute->getSource()->getOptionId($argValue);
    }
}

Вы можете добавить опцию к своему атрибуту, указав код и значение опции

$this->addAttributeOptions('unfiorm_type', 'leotartd')
1 голос
/ 28 ноября 2015

Здесь простой и очень быстрый способ ....

Удалить опцию

/* My option value */
$value = 'A value';
/* Delete an option */
$options = array();
$entity_type_id = Mage::getModel('eav/entity')->setType('catalog_product')->getTypeId(); // Product Entity Type ID
$attribute = Mage::getModel('eav/entity_attribute')->loadByCode($entity_type_id, $attribute_code); // Load attribute by code
if ($attribute && $attribute->usesSource()) {
    $option_id = $attribute->getSource()->getOptionId($value); // Check Option ID from value...
    if ($option_id) {
        $options['delete'][$option_id] = true; 
        $attribute->setOption($options)->save();
    }
}
/* END ! */

Добавить или обновить опцию

/* Add/Update an option */
$options = array();
$entity_type_id = Mage::getModel('eav/entity')->setType('catalog_product')->getTypeId(); // Product Entity Type ID
$attribute = Mage::getModel('eav/entity_attribute')->loadByCode($entity_type_id, $attribute_code); // Load attribute by code
if ($attribute && $attribute->usesSource()) {
    $option_id = $attribute->getSource()->getOptionId($value); // Check Option ID...
    $options['order'][$option_id] = 10; // Can be removed... Set option order...
    $options['value'][$option_id] = array(
        0 => $value, // Admin Store - Required !
        1 => $value, // Store id 1 - If U want ! Can be removed
    );
    $attribute->setDefault(array($option_id)); /* If you want set option as default value */
    $attribute->setOption($options)->save(); /* That's all */
}
/* END ! */  
1 голос
/ 07 декабря 2012

Важно! (Надеюсь, это кому-нибудь поможет, потому что я застрял как 2 часа с этой проблемой)

Если вы используете специальные символы (такие как ä, ö, ü, ß,×, ...) не забудьте правильно их кодировать!

array_walk($manufacturers , create_function('&$val', '$val = utf8_encode($val);'));
0 голосов
/ 06 сентября 2018

Ответ Арвинда Бхардваджа: введите правильный код. Но если вы хотите выполнить это без установщика, т. Е. В любом другом коде, то вам может пригодиться:

Согласен с Arvind, но он работает только для вставки одного значения параметра, и если вы хотите выполнить вставку нескольких значений параметра, вам просто нужно заменить код из "$ option ['value'] [$ key. ' '. $ изготовитель] = $ изготовитель; " to "$ option ['values'] [$ key. ''. $ factory] = $ factory;" к этому.

ниже - окончательный код

            require_once 'app/Mage.php';
            umask(0);
            Mage::app('default');

            $arg_attribute = 'manufacturer';
            $manufacturers = array('Sony', 'Philips', 'Samsung', 'LG', 'Panasonic', 'Fujitsu', 'Daewoo', 'Grundig', 'Hitachi', 'JVC', 'Pioneer', 'Teac', 'Bose', 'Toshiba', 'Denon', 'Onkyo', 'Sharp', 'Yamaha', 'Jamo');

            $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;
            foreach ($manufacturers as $key => $manufacturer) {
                $option['values'][$key . '_' . $manufacturer] = $manufacturer;
            }

            $setup = new Mage_Eav_Model_Entity_Setup('core_setup');
            $setup->addAttributeOption($option);

Я надеюсь, что это работает для вставки нескольких опций.

0 голосов
/ 02 декабря 2016

В моем уроке я объясняю, как читать параметры из CSV и создавать параметры программно.

http://www.pearlbells.co.uk/add-attribute-options-magento-scripts/ пожалуйста, нажмите на учебник для дальнейшего объяснения

function createAttribute($options) {
$option = array('attribute_id' => 
Mage::getModel('eav/entity_attribute')->getIdByCode(
     Mage_Catalog_Model_Product::ENTITY, 
     'color'
    )
);

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

}

$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$setup->addAttributeOption($option);
}
...