2012-02-10 14 views
5

Creé un nuevo atributo (selección múltiple) con algunos valores, todo funciona bien pero cuando quiero eliminar todos los valores seleccionados para un producto, recibo el mensaje "El atributo del producto se ha guardado". pero los valores todavía están seleccionados.Magento - No se puede eliminar el valor de selección múltiple en el administrador del producto

Notas:

  • prosigo Ctrl + Click para deseleccionar el último valor antes de ahorro.
  • que poner el parámetro Valor Obligatorio de mi atributo a Sin
  • Si salvo un producto sin ningún valor seleccionado todavía, entonces no hay valores de ser seleccionado
  • Mis índices se actualizan adecuadamente
  • continuación, se muestran dos pantallas, a la izquierda los parámetros de mi atributo y a la derecha mi selección múltiple.

enter image description here

estoy quedando sin ideas así que gracias por su ayuda.

Respuesta

11

Este es un comportamiento conocido (molesto) de los formularios Magento Adminhtml.
El problema es que si no se selecciona ningún valor para el multiselección, no se publica ningún valor para ese atributo cuando se envía el formulario.

En el lado del servidor, Magento carga el modelo, establece todos los valores de atributo publicados en el modelo y lo guarda.
Como no se publicó ningún valor, el valor original que se cargó en el modelo no se actualizó.

Como solución para los atributos con un modelo de fuente personalizado, suelo ofrecer una opción vacía con un valor de opción especial (por ejemplo, -1). Ese valor no debe ser 0 o una cadena vacía.

Luego especifico un modelo de back-end para ese atributo que busca ese valor especial en el método _beforeSave(). Si se encuentra, el modelo de backend desata el atributo en la instancia del modelo.

Aquí se muestra un ejemplo:

Fuente Modelo:

class Your_Module_Model_Entity_Attribute_Source_Example 
    extends Mage_Eav_Model_Entity_Attribute_Source_Abstract 
{ 
    const EMPTY = '-1'; 

    public function getAllOptions() 
     $options = array(
      array('value' => 1, 'label' => 'One'), 
      array('value' => 2, 'label' => 'Two'), 
      array('value' => 3, 'label' => 'Three') 
     ); 
     if ($this->getAttribute()->getFrontendInput() === 'multiselect') 
     { 
      array_unshift($options, array('value' => self::EMPTY, 'label' => '')); 
     } 
     return $options; 
    } 
} 

backend Modelo:

class Your_Module_Model_Entity_Attribute_Backend_Example 
    extends Mage_Eav_Model_Entity_Attribute_Backend_Abstract 
{ 
    public function beforeSave($object) 
    { 
     $code = $this->getAttribute()->getAttributeCode(); 
     $value = $object->getData($code); 
     if ($value == Your_Module_Model_Entity_Attribute_Source_Example::EMPTY) 
     { 
      $object->unsetData($code); 
     } 
     return parent::beforeSave($object); 
    } 
} 

Si encontrar una mejor solución por favor hágamelo saber.

+0

Entiendo, gracias por compartir su código! – adrien54

0

Acabo de toparme con este problema en Magento 1.7.0.2, mi solución:

  • Uso Firefox con Firebug

  • haga clic derecho en la lista de selección múltiple, elija Inspeccionar Elemento con y verá algo como esto en la parte inferior de Firebug: XLarge

  • Haga doble clic en el seleccionado, haga clic con el botón derecho, corte, deje de seleccionar el atributo y simplemente guarde la página.

1

Sí Me pareció un gran dolor en el culo demasiado pero es una mejora en el error anterior que provocó que destilan atribuyen a las selecciones sean borrados si se trató de actualizar los atributos de varios productos a la vez.

De todos modos, aquí está mi lo que hago si quiero eliminar una opción de productos utilizando un menú desplegable de atributos:

  1. vaya a Administrar atributos
  2. Haga clic en Administrar Opciones de etiquetas
  3. Añadir un temporal opción de la lista
  4. Asignar esta nueva opción de atributo para todos los productos que desea cambio
  5. Eliminar la opción atributo temporal

Todo resuelto.

1

Hay una función llamada <can_be_empty> tiene que ir a su system.xml y añadir esta configuración en su archivo:

<can_be_empty>1</can_be_empty> 

luego inspeccione el elemento y retire la selected = "selected" y pulsa guardar, ahora puede guardar la selección múltiple sin ningún valor.

1

Agregue una opción inexistente a html a través de la herramienta de desarrollador chrome/firefox, seleccione esa opción y guárdela. por ej.

<option value="99999999">Click this to unselect option</option> 
Cuestiones relacionadas