2012-02-10 152 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>