2012-02-10 19 views
5

Ho creato un nuovo attributo (selezione multipla) con alcuni valori, tutto funziona correttamente ma quando voglio eliminare tutti i valori selezionati per un prodotto, ottengo il messaggio "L'attributo del prodotto è stato salvato." ma i valori sono ancora selezionati.Magento - Impossibile eliminare il valore di selezione multiplo nell'admin. Prodotto

Note:

  • ho premere Ctrl + Click per deselezionare l'ultimo valore prima di risparmio.
  • ho impostare il parametro Valore richiesto del mio attributo per No
  • Se salvo un prodotto senza alcun valore ancora selezionato, quindi nessun valore vengono selezionati
  • I miei indici vengono correttamente aggiornati
  • Vedi sotto due schermate, a sinistra i parametri del mio attributo e sulla destra la mia selezione multipla.

enter image description here

che sto a corto di idee così, grazie per il vostro aiuto.

risposta

11

Questo è un comportamento noto (fastidioso) dei moduli Magento Adminhtml.
Il problema è che se nessun valore è selezionato per il multiselect, nessun valore per quell'attributo viene registrato quando il modulo viene inviato.

Sul lato server, Magento carica il modello, imposta tutti i valori di attributo pubblicati sul modello e lo salva.
Poiché non è stato registrato alcun valore, il valore originale caricato sul modello non è stato aggiornato.

Come soluzione per gli attributi con un modello di origine personalizzato, tendo a fornire un'opzione vuota con un valore di opzione speciale (ad esempio -1). Questo valore non deve essere 0 o una stringa vuota.

Quindi si specifica un modello di back-end per quell'attributo che controlla quel valore speciale nel metodo. Se viene trovato, il modello di backend disattiva l'attributo sull'istanza del modello.

Ecco un esempio:

Fonte Modello:

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 Modello:

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

se si trova una soluzione migliore per favore fatemelo sapere.

+0

Ho capito, grazie per aver condiviso il tuo codice! – adrien54

0

Ho appena avuto questo problema in Magento 1.7.0.2, la mia soluzione:

  • Uso Firefox con Firebug

  • destro del mouse sulla lista di selezione multipla, scegliere Inspect Element con e vedrete qualcosa di simile alla parte inferiore in Firebug: XLarge

  • Fare doppio clic sul selezionato, fare clic con il pulsante destro del mouse, tagliare, nessun attributo selezionato e salvare la pagina.

1

Sì ho trovato questo un grande dolore nella bum troppo, ma è un miglioramento rispetto alla precedente bug che ha causato discesa attribuiscono le selezioni per essere puliti, se si è tentato di aggiornare gli attributi per i diversi prodotti in una sola volta.

Ad ogni modo, ecco il mio quello che faccio se voglio rimuovere un'opzione da prodotti utilizzando un menu a discesa attributo:

  1. Vai a gestire gli attributi
  2. Fare clic su Gestisci Opzioni etichette
  3. Aggiungere una temporanea opzione nell'elenco
  4. Assegnare questa nuova opzione attributo per tutti i prodotti che si desidera cambiamento
  5. Eliminare l'opzione attributo temporaneo

Tutto risolto.

1

C'è una funzione chiamata <can_be_empty> è necessario andare al tuo system.xml e aggiungere questa configurazione nel file:

<can_be_empty>1</can_be_empty> 

quindi ispezionare l'elemento e rimuovere il selezionato = "selezionato" e ha colpito salvare, ora puoi salvare la multi-selezione senza alcun valore.

1

Aggiungere un'opzione inesistente a html tramite lo strumento di sviluppo chrome/firefox, selezionare tale opzione e salvare. es.

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