Estoy tratando de añadir nuevos valores de opción en Magento atribuir el uso de una secuencia de comandos para acelerar el proceso ya que tengo más de 2.000 manufactuersAñadir nuevos valores para una opción de atributo en Magento
Respuesta
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');
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.
¡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);'));
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);' –
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 ! */
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')
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);
}
- 1. Magento: Obtener el valor de una opción Atributo EAV/Seleccionar
- 2. Añadir atributo personalizado para etiquetas HTML
- 3. Añadir nuevos datos en PHP cadena JSON
- 4. Yu - CGridView - añadir propio atributo
- 5. Magento cambio personalizada El valor de opción antes de añadir a la cesta
- 6. Añadir atributo seleccionado la opción en el menú de selección con jQuery
- 7. Magento: establezca el atributo de producto para usar los valores predeterminados
- 8. Añadir attributeSet pero en base a un conjunto existente - Magento
- 9. añadir nuevos usuarios en la primavera de Seguridad
- 10. jQuery - agregar/añadir valor a "rel" atributo
- 11. Añadir eventos para antes/después de una acción de un controlador en Magento
- 12. Obtener una lista de opciones de atributo de Magento
- 13. selector de atributo jQuery para valores múltiples
- 14. Obtener atributo model por attribute_code en Magento
- 15. Magento no toma nuevos detalles de la base de datos
- 16. ¿Procesar valores múltiples para una sola opción usando getopt/optparse?
- 17. Taquigrafía para agregar nuevos valores a un hash de matrices
- 18. ¿Hay alguna manera de establecer nuevos valores predeterminados para ggsave?
- 19. ¿Habilitar el editor WYSIWYG para el atributo personalizado de Magento?
- 20. ¿Cómo obtener las opciones de un atributo configurable en Magento?
- 21. loess predecir con nuevos valores de x
- 22. Magento API: Reconstruir índices después de agregar nuevos productos
- 23. ¿Puede una Opción en una etiqueta Seleccionar transportar valores múltiples?
- 24. Magento: cómo rellenar los valores del atributo desplegable de un producto
- 25. Añadir y eliminar atributo con jQuery
- 26. Cómo combinar valores de opción en Scala?
- 27. Colección Magento no selecciona el atributo
- 28. jQuery añadir opción en blanco al principio de la lista y hacer seleccionada para desplegable
- 29. ¿Añadir valores de píxeles de JavaScript?
- 30. ¿Es posible obtener nuevos valores para Id (IDENTIDAD) antes de insertar datos en una tabla?
¿cómo preforma esto sin el instalador? Es para un sitio web de producción. – Tony
no funcionó al usar como script – Tony
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. –