我创建了一个新的属性(多选)与一些值,一切工作正常,但是当我想删除产品的所有选定的值,我收到消息“产品属性已保存。”但值仍然被选中。Magento - 无法删除多产品选择值在产品管理
注:
- 我按
Ctrl + Click
我保存之前,取消选择的最后一个值。 - 我设置的参数值必需我的属性的没有
- 如果我救一个产品,但仍未选择任何值,那么没有价值得到选择
- 我的索引是正确刷新
- 见下文两个屏幕,左边是我的属性的参数,右边是我的多重选择。
我跑出来的想法十分感谢你的帮助。
我创建了一个新的属性(多选)与一些值,一切工作正常,但是当我想删除产品的所有选定的值,我收到消息“产品属性已保存。”但值仍然被选中。Magento - 无法删除多产品选择值在产品管理
注:
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 1.7.0中遇到了这个问题。2,我的解决方案:
使用Firefox的Firebug
右键单击多选列表中,选择与元素检查,你会看到这样的事情在Firebug的底部: XLARGE
双击选中,右键单击,剪切,不再选择属性,只保存页面。
是的,我发现这在屁股大的痛苦太多,但它是在以前的错误的改善造成下拉属性,如果你尝试一次更新的几个产品属性选项将被擦拭。
无论如何,这里是我的就是我做,如果我想用一个下拉属性删除从产品的选择:
全部解决。
有一个叫<can_be_empty>
你需要去您的system.xml并添加这个配置到你的文件功能:
<can_be_empty>1</can_be_empty>
然后检查元素和选择=“选择”,并点击保存删除,现在您可以保存多重选择而没有任何值。
通过chrome/firefox开发人员工具为html添加不存在的选项,选择该选项并保存。 例如。
<option value="99999999">Click this to unselect option</option>
我明白,感谢您分享您的代码! – adrien54 2012-02-10 11:57:46