Magento - Не удается удалить значение множественного выбора в админке продукта - PullRequest
5 голосов
/ 10 февраля 2012

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

Примечания:

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

enter image description here

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

Ответы [ 5 ]

11 голосов
/ 10 февраля 2012

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

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

3 голосов
/ 22 ноября 2016

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

<can_be_empty>1</can_be_empty>

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

1 голос
/ 16 февраля 2017

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

<option value="99999999">Click this to unselect option</option>
1 голос
/ 19 июня 2013

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

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

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

Все решено.

0 голосов
/ 18 февраля 2013

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...