2011-02-20 25 views

Respuesta

17

Aquí es una pieza de código que me utilizado para realizar exactamente esta tarea. Cree un módulo personalizado (utilizando ModuleCreator como herramienta) y luego cree un mysql4-install-0.1.0.php en la carpeta sql/modulename_setup. Debe contener lo siguiente (¡adaptado a sus propios datos, por supuesto!).

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

Más documentación sobre el Magento wiki si lo desea.

Si no desea hacerlo en un módulo personalizado, sólo podría crear un archivo PHP que comienza con:

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

¿cómo preforma esto sin el instalador? Es para un sitio web de producción. – Tony

+0

no funcionó al usar como script – Tony

+0

mensaje de error? Puedo asegurarle que funciona, he usado exactamente ese código. El uso de un instalador es el método preferido para los sitios de producción. –

8

respuesta de Jonathan es correcta. Pero si desea realizar sin instalador es decir en cualquier otro código, entonces usted puede encontrar útil esta información:

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

Más información se puede encontrar here.

1

¡Importante! (Espero que esto ayude a alguien, porque me quedé como 2h con este problema)

Si está utilizando caracteres especiales (como ä, ö, ß, ×, ...) asegúrese de codificarlos adecuadamente !

array_walk($manufacturers , create_function('&$val', '$val = utf8_encode($val);')); 
+5

Como todos tenemos PHP/5.3, una versión más legible y más rápida sería '$ manufacturers = array_map ('utf8_encode', $ fabricantes);' –

1

Aquí una manera sencilla y muy rápida ....

Eliminar una opción

/* 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 ! */ 

añadir o actualizar una opción

/* 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 ! */ 
2

He creado una función para añadir dinámicamente la opción al atributo

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

Se puede añadir una opción a su atributo proporcionando código y opción de valor

$this->addAttributeOptions('unfiorm_type', 'leotartd') 
0

En mi tutorial que estoy explicando cómo leer las opciones de la CSV y crear las opciones pro gramaticalmente.

http://www.pearlbells.co.uk/add-attribute-options-magento-scripts/ por favor haga clic en el tutorial para una explicación más detallada

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); 
} 
Cuestiones relacionadas