2012-02-10 168 views
5

我创建了一个新的属性(多选)与一些值,一切工作正常,但是当我想删除产品的所有选定的值,我收到消息“产品属性已保存。”但值仍然被选中。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 2012-02-10 11:57:46

0

刚刚在Magento 1.7.0中遇到了这个问题。2,我的解决方案:

  • 使用Firefox的Firebug

  • 右键单击多选列表中,选择与元素检查,你会看到这样的事情在Firebug的底部: XLARGE

  • 双击选中,右键单击,剪切,不再选择属性,只保存页面。

1

是的,我发现这在屁股大的痛苦太多,但它是在以前的错误的改善造成下拉属性,如果你尝试一次更新的几个产品属性选项将被擦拭。

无论如何,这里是我的就是我做,如果我想用一个下拉属性删除从产品的选择:

  1. 转到管理属性
  2. 单击管理标签选项
  3. 添加一个临时的选项列表
  4. 将此新属性选项分配给所有您想要的产品 更改
  5. 删除临时属性选项

全部解决。

1

有一个叫<can_be_empty>你需要去您的system.xml并添加这个配置到你的文件功能:

<can_be_empty>1</can_be_empty> 

然后检查元素和选择=“选择”,并点击保存删除,现在您可以保存多重选择而没有任何值。

1

通过chrome/firefox开发人员工具为html添加不存在的选项,选择该选项并保存。 例如。

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