Como adicionar programaticamente valores de opção de atributo no script de atualização de dados?

10

Quero adicionar programaticamente novos valores de opção de produto em um script de atualização de dados do meu módulo. Como posso fazer isso?

Anton Belonovich
fonte

Respostas:

12

Adicione o código abaixo no seu arquivo de script de atualização

<?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();

Verifique o código do valor da opção duplicada:

<?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();
Abdul
fonte
11
Qual é o significado dos índices 'r', 'b', 'y'no $option['value']['r'][0] = 'Red';?
Anton Belonovich 07/02
11
Isso cria uma opção suspensa quebrada aqui, no Magento CE 1.9. A tabela eav_attribute_optionobtém uma nova linha, mas sem uma linha correspondente eav_attribute_option_value. Deve ser algo com a $optionestrutura da matriz.
Anse
Você pode me ajudar a verificar o valor do atributo, se esse valor já estiver disponível. Assim valor duplicado não inserir no atributo
Purushotam Sharma
@Purushotam Sharma: Atualizações e verificação de pls e deixe-me saber que está funcionando ou não, porque não sou código testado.
Abdul
Olá @Abdul! não é a adição de opção durante a execução deste roteiro
SagarPPanchal
12

tente isso,

para valor único: -

$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);

para vários valores: -

$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' seria um color_name (ex: red) arg_value seria seu número inteiro optionId aaik.

O que também precisaria ser adquirido primeiro é qual é a próxima opçãoId não utilizada. Para ser usado para esta nova opção de atributo.

Dhaval Dave
fonte
6

Por exemplo, você deseja adicionar Menvalor à genderopção.

Primeiro você precisa criar seu script de atualização no diretório module, por exemplo app/code/local/MyCompany/MyModule/data/mymodule_setup/data-upgrade-0.1.0-0.1.1.php.

Em seguida, preencha-o com código como este:

<?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();
Anton Belonovich
fonte
2

O código a seguir adiciona opções de atributos programaticamente magento 1.

Consulte a explicação detalhada sobre como ler em CSV e comparar com as opções de atributos existentes 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);
}
Liz Eipe C
fonte