यह 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);
}
}
यदि आप पाते हैं एक बेहतर समाधान का तो कृपया मुझे बताएं
यहाँ एक उदाहरण है।
मैं समझता हूं, आपका कोड साझा करने के लिए धन्यवाद! – adrien54