我創建了一個新的屬性(多選)與一些值,一切工作正常,但是當我想刪除產品的所有選定的值,我收到消息「產品屬性已保存。」但值仍然被選中。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