Bagaimana cara menambahkan nilai opsi atribut secara terprogram dalam skrip peningkatan data?

10

Saya ingin secara terprogram menambahkan nilai opsi produk baru dalam skrip peningkatan data modul saya. Bagaimana saya bisa melakukan ini?

Anton Belonovich
sumber

Jawaban:

12

Tambahkan kode di bawah ini dalam file skrip upgrade Anda

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

Periksa kode nilai opsi duplikat:

<?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
sumber
1
Apa arti dari indeks 'r', 'b', 'y'di $option['value']['r'][0] = 'Red';?
Anton Belonovich
1
Itu menciptakan opsi drop-down yang rusak di sini, di Magento CE 1.9. Tabel eav_attribute_optionmendapat satu baris baru, tetapi tanpa baris yang sesuai di eav_attribute_option_value. Pasti ada sesuatu dengan $optionstruktur array.
Anse
Tolong bisakah Anda membantu saya memeriksa nilai atribut jika nilai itu sudah tersedia. Jadi nilai duplikat tidak dimasukkan dalam atribut
Purushotam Sharma
@ Purushotam Sharma: Pembaruan dan tolong periksa dan beri tahu saya bahwa ini berfungsi atau tidak karena saya bukan kode yang diuji.
Abdul
halo @ Abdul! itu tidak menambahkan opsi saat menjalankan skrip ini
SagarPPanchal
12

coba ini,

untuk nilai tunggal: -

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

untuk beberapa nilai: -

$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' akan menjadi color_name (ex: red) arg_value akan menjadi integer optionId afaik.

Hal yang juga perlu diakuisisi terlebih dahulu, adalah apa opsiId yang tidak digunakan berikutnya. Untuk digunakan untuk opsi atribut baru ini.

Dhaval Dave
sumber
6

Misalnya, Anda ingin menambahkan Mennilai ke genderopsi.

Pertama, Anda harus membuat skrip pemutakhiran Anda di direktori modul, mis app/code/local/MyCompany/MyModule/data/mymodule_setup/data-upgrade-0.1.0-0.1.1.php.

Kemudian isi dengan kode seperti ini:

<?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
sumber
2

Kode berikut menambahkan opsi atribut secara terprogram magento 1.

Silakan merujuk penjelasan terperinci cara membaca dari CSV dan membandingkan dengan opsi atribut yang ada 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
sumber