5

我创建了一个带有一些值的新属性(多选),一切正常,但是当我想删除产品的所有选定值时,我收到消息“产品属性已保存”。但仍然选择这些值。

笔记:

  • 在保存之前,我按下Ctrl + Click以取消选择最后一个值。
  • 我将属性的参数Value Required设置为No
  • 如果我保存一个尚未选择任何值的产品,则不会选择任何值
  • 我的索引已正确刷新
  • 请参阅下面的两个屏幕,左侧是我的属性的参数,右侧是我的多项选择。

在此处输入图像描述

我的想法不多了,所以感谢您的帮助。

4

5 回答 5

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

如果您找到更好的解决方法,请告诉我。

于 2012-02-10T11:35:00.060 回答
3

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

<can_be_empty>1</can_be_empty>

然后检查元素并删除 selected="selected" 并点击保存,现在您可以保存没有任何值的多选。

于 2016-11-22T19:31:47.013 回答
1

是的,我也发现这对流浪汉来说是一个很大的痛苦,但它是对先前错误的改进,如果您尝试一次更新多个产品的属性,则会导致下拉属性选择被擦除。

无论如何,如果我想使用下拉属性从产品中删除一个选项,我会这样做:

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

都解决了。

于 2013-06-19T11:30:58.380 回答
1

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

<option value="99999999">Click this to unselect option</option>
于 2017-02-16T14:39:57.150 回答
0

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

  • 将 Firefox 与 Firebug 一起使用

  • 右键单击多选列表,选择 Inspect with Element,您会在 Firebug 的底部看到类似这样的内容:XLarge

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

于 2013-02-18T11:43:58.147 回答