我使用一些值创建了一个新属性(多选),一切正常,但是当我想删除产品的所有选定值时,我收到消息“产品属性已保存”。但这些值仍然被选中。
笔记:
Ctrl + Click
在我保存之前取消选择最后一个值。 我的想法快用完了,所以感谢您的帮助。
最佳答案
这是 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);
}
}
如果您找到更好的解决方法,请告诉我。
关于Magento - 无法在产品管理中删除多个选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9226709/