В Magento - не может удалить множественные выберите значение в продукте админ
Я создал новый атрибут (множественный выбор) с некоторыми значениями, все работает нормально, но когда я хочу удалить все выбранные значения для продукта, я получаю сообщение "атрибут продукта был сохранен.- но значения все равно выбираются.
Примечания:
- я нажимаю
Ctrl + Click
, чтобы отменить выбор последнего значения перед сохранением. - я задаю параметру требуемое значение моего атрибута No
- Если я сохраняю продукт без какой-либо ценности, выбранной еще, то никакие значения не выбираются
- мои индексы должным образом обновлены
- смотрите ниже два экрана, слева параметры моего атрибута и справа мой множественный выбор.
5 ответов:
Это известное (раздражающее) поведение форм Magento Adminhtml.
Проблема заключается в том, что если для мультиселекта Не выбрано значение, то при отправке формы оно не будет учтено.На стороне сервера Magento затем загружает модель, устанавливает все опубликованные значения атрибутов на модели и сохраняет ее.
Поскольку значение не было учтено, исходное значение, загруженное в модель, не обновлялось.Как решение для атрибутов с пользовательским источником модель I, как правило, предоставляет пустую опцию со специальным значением опции (например,
-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); } }
Есть функция под названием
<can_be_empty>
вам нужно перейти к вашей системе.xml и добавьте эту конфигурацию в свой файл:<can_be_empty>1</can_be_empty>
Затем проверьте элемент и удалите selected= "selected" и нажмите save, теперь вы можете сохранить мульти-select без каких-либо значений.
Да, я нашел это большой болью в заднице тоже, но это улучшение по сравнению с предыдущей ошибкой, которая вызвала выпадающий выбор атрибутов, чтобы быть стерты, если вы попытались обновить атрибуты для нескольких продуктов сразу.
В любом случае, вот что я делаю, если хочу удалить опцию из продуктов с помощью выпадающего атрибута:
- перейти к управлению атрибутами
- Щелкните Управление Параметрами Меток
- Добавить временную опцию в список
- назначьте этот новый параметр атрибута все продукты, которые вы хотите изменение
- удалить параметр временного атрибута
Все решено.
Добавьте несуществующую опцию в html через chrome / firefox developer tool, выберите эту опцию и сохраните. напр..
<option value="99999999">Click this to unselect option</option>
Только что столкнулся с этой проблемой в Magento 1.7.0.2, мое решение:
Используйте Firefox с Firebug
Щелкните правой кнопкой мыши список мультиселектов, выберите проверить с помощью элемента, и вы увидите что-то подобное внизу в Firebug : XLarge
Дважды щелкните на выбранном, щелкните правой кнопкой мыши, вырезать, больше не выбранный атрибут и просто сохраните страницу.