Magento - невозможно удалить значение множественного выбора в администраторе продукта

Я создал новый атрибут (множественный выбор) с некоторыми значениями, все работает нормально, но когда я хочу удалить все выбранные значения для продукта, я получаю сообщение «Атрибут продукта сохранен». но значения по-прежнему выбираются.

Примечания:

  • Я нажимаю Ctrl + Click, чтобы отменить выбор последнего значения перед сохранением.
  • Я установил для параметра Требуемое значение своего атрибута значение Нет.
  • Если я сохраню продукт без выбранного значения, то никакие значения не будут выбраны
  • Мои индексы правильно обновляются
  • См. ниже два экрана, слева параметры моего атрибута и справа мой множественный выбор.

введите здесь описание изображения

У меня заканчиваются идеи, так что спасибо за вашу помощь.


person adrien54    schedule 10.02.2012    source источник


Ответы (5)


Это известное (раздражающее) поведение форм 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);
    }
}

Если вы найдете лучший обходной путь, пожалуйста, дайте мне знать.

person Vinai    schedule 10.02.2012

Существует функция под названием <can_be_empty>, вам нужно перейти в ваш system.xml и добавить эту конфигурацию в ваш файл:

<can_be_empty>1</can_be_empty>

затем проверьте элемент и удалите selected="selected" и нажмите "Сохранить", теперь вы можете сохранить множественный выбор без каких-либо значений.

person Nickool    schedule 22.11.2016

Да, я тоже нашел это большой проблемой, НО это улучшение по сравнению с предыдущей ошибкой, из-за которой выбор атрибутов в раскрывающемся списке стирался, если вы пытались обновить атрибуты для нескольких продуктов одновременно.

В любом случае, вот что я делаю, если хочу удалить опцию из продуктов, используя раскрывающийся атрибут:

  1. Перейти к управлению атрибутами
  2. Нажмите «Управление параметрами метки».
  3. Добавить временный вариант в список
  4. Назначьте эту новую опцию атрибута всем продуктам, которые вы хотите изменить.
  5. Удалить параметр временного атрибута

Все решено.

person barella    schedule 19.06.2013

Добавьте несуществующий параметр в html с помощью инструмента разработчика Chrome/Firefox, выберите этот параметр и сохраните. например.

<option value="99999999">Click this to unselect option</option>
person Uğur Taşdildiren    schedule 16.02.2017

Только что столкнулся с этой проблемой в Magento 1.7.0.2, мое решение:

  • Используйте Firefox с Firebug

  • щелкните правой кнопкой мыши список множественного выбора, выберите «Проверить с помощью элемента», и вы увидите что-то вроде этого внизу в Firebug: XLarge

  • Дважды щелкните выбранный, щелкните правой кнопкой мыши, вырежьте, больше не выбран атрибут и просто сохраните страницу.

person Zurd    schedule 18.02.2013