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


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

Примечания:

  • я нажимаю Ctrl + Click, чтобы отменить выбор последнего значения перед сохранением.
  • я задаю параметру требуемое значение моего атрибута No
  • Если я сохраняю продукт без какой-либо ценности, выбранной еще, то никакие значения не выбираются
  • мои индексы должным образом обновлены
  • смотрите ниже два экрана, слева параметры моего атрибута и справа мой множественный выбор.

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

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

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 без каких-либо значений.

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

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

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

Все решено.

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

<option value="99999999">Click this to unselect option</option>

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

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

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

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