2012-02-10 24 views
5

में mulitple चयन मान को हटा नहीं सकता है मैंने कुछ मानों के साथ एक नई विशेषता (एकाधिक चयन) बनाई है, सब ठीक काम करता है लेकिन जब मैं किसी उत्पाद के लिए सभी चयनित मानों को हटाना चाहता हूं, तो मुझे संदेश मिलता है "उत्पाद विशेषता सहेजा गया है।" लेकिन मान अभी भी चुने गए हैं।Magento - उत्पाद व्यवस्थापक

नोट्स:

  • मैं Ctrl + Click प्रेस इससे पहले कि मैं बचाने के अंतिम मान अचयनित करने के लिए।
  • मैं पैरामीटर मूल्य आवश्यक करने के लिए मेरी विशेषता का सेट नहीं
  • मैं अभी तक चयनित किसी भी मूल्य के बिना एक उत्पाद को बचाने, तो कोई मान का चयन किया हो
  • मेरे इंडेक्स ठीक से
  • ताजा कर रहे हैं नीचे देखें बाईं ओर दो स्क्रीन, मेरी विशेषता के पैरामीटर और दाईं ओर मेरे एकाधिक चयन।

enter image description here

मैं तो आपकी मदद के लिए धन्यवाद विचारों से बाहर चल रहा हूँ।

उत्तर

11

यह Magento Adminhtml रूपों का एक ज्ञात (कष्टप्रद) व्यवहार है।
समस्या यह है कि यदि मल्टीसेलेक्ट के लिए कोई मान नहीं चुना गया है, तो फॉर्म सबमिट होने पर उस विशेषता के लिए कोई मान पोस्ट नहीं किया जाता है।

सर्वर की ओर Magento पर मॉडल लोड करता है, मॉडल पर सभी पोस्ट किए गए विशेषता मान सेट करता है और इसे सहेजता है।
क्योंकि कोई मान पोस्ट नहीं किया गया था मूल मॉडल जो मॉडल पर लोड किया गया था अद्यतन नहीं किया गया था।

कस्टम स्रोत मॉडल के साथ विशेषताओं के समाधान के रूप में, मैं एक विशेष विकल्प मान (उदा। -1) के साथ एक खाली विकल्प प्रदान करता हूं। वह मान 0 या खाली स्ट्रिंग नहीं होना चाहिए।

फिर मैं उस विशेषता के लिए बैकएंड मॉडल निर्दिष्ट करता हूं जो _beforeSave() विधि में उस विशेष मान के लिए जांच करता है। यदि यह पाया जाता है कि बैकएंड मॉडल मॉडल उदाहरण पर विशेषता को अनसेट करता है।

स्रोत मॉडल::

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

बैकएंड मॉडल:

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

यदि आप पाते हैं एक बेहतर समाधान का तो कृपया मुझे बताएं

यहाँ एक उदाहरण है।

+0

मैं समझता हूं, आपका कोड साझा करने के लिए धन्यवाद! – adrien54

0

बस Magento 1.7.0 में इस समस्या में भाग गया।2, मेरे समाधान:

  • उपयोग फ़ायरफ़ॉक्स Firebug के साथ

  • राइट क्लिक करें एकाधिक चयन करें सूची, तत्व के साथ निरीक्षण चुनते हैं और आप Firebug में निचले भाग में कुछ इस तरह दिखाई देंगे: XLarge

  • चयनित, राइट-क्लिक, कट, कोई और चयनित विशेषता पर डबल-क्लिक करें और केवल पृष्ठ को सहेजें।

1

हाँ मैं इस बम में एक बड़ा दर्द भी मिली लेकिन इसे जो ड्रॉप डाउन विशेषता चयन साफ ​​हो अगर आप एक बार में कई उत्पादों के लिए विशेषताओं को अद्यतन करने की कोशिश की वजह से पिछले बग पर एक सुधार है।

वैसे भी, यहाँ है मेरी अगर मैं विशेषता एक ड्रॉप डाउन का उपयोग करके उत्पादों से एक विकल्प निकालना चाहते हैं मुझे क्या करना: गुण प्रबंधित करने के लिए

  • क्लिक करें लेबल विकल्प प्रबंधित
  • एक अस्थायी जोड़े

    1. जाओ सूची
    2. करने का विकल्प परिवर्तन
    3. के सभी उत्पादों आप चाहते हैं करने के लिए इस नई विशेषता विकल्प निरुपित अस्थायी विशेषता विकल्प हटाएं

    सभी हल हो गए।

  • 1

    एक सुविधा बुलाया <can_be_empty> आप अपने System.Xml पर जाएं और अपनी फाइल में इस विन्यास जोड़ने की जरूरत नहीं है:

    <can_be_empty>1</can_be_empty> 
    

    तो तत्व का निरीक्षण किया और निकालने के चयनित = "चयनित" और बचाने के मारा, अब आप बिना किसी मूल्य के बहु-चयन को बचा सकते हैं।

    1

    क्रोम/फ़ायरफ़ॉक्स डेवलपर टूल के माध्यम से एचटीएमएल के लिए एक गैर मौजूद विकल्प जोड़ें, उस विकल्प का चयन करें और सहेजें। उदाहरण के लिए।

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