Voglio aggiungere a livello di codice nuovi valori delle opzioni di prodotto in uno script di aggiornamento dei dati del mio modulo. Come posso fare questo?
Voglio aggiungere a livello di codice nuovi valori delle opzioni di prodotto in uno script di aggiornamento dei dati del mio modulo. Come posso fare questo?
Risposte:
Aggiungi il seguente codice nel tuo file di script di aggiornamento
<?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();
Verifica codice valore opzione duplicato:
<?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
ottiene una nuova riga, ma senza una riga corrispondente in eav_attribute_option_value
. Deve essere qualcosa con la $option
struttura dell'array.
prova questo,
per valore singolo: -
$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);
per più valori: -
$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' sarebbe un color_name (es: rosso) arg_value sarebbe la sua opzione interaId afaik.
La cosa che dovrebbe anche essere acquisita per prima, è la prossima opzione non utilizzata. Da utilizzare per questa nuova opzione di attributo.
Ad esempio, si desidera aggiungere Men
valore gender
all'opzione.
Per prima cosa devi creare il tuo script di aggiornamento nella directory del modulo, ad es app/code/local/MyCompany/MyModule/data/mymodule_setup/data-upgrade-0.1.0-0.1.1.php
.
Quindi riempilo con il codice in questo modo:
<?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();
Il codice seguente aggiunge opzioni di attributi a livello di codice magento 1.
Fare riferimento per una spiegazione dettagliata su come leggere da CSV e confrontarlo con le opzioni di attributo esistenti 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'
in$option['value']['r'][0] = 'Red';
?