Call to a member function setAttribute() on a non-object in /app/code/core/Mage/Eav/Model/Entity/Attribute/Abstract.php on line 374

[16 июля 2019 г.]    Российская сборка Magento 2.52.2
Magento 2: модули и услуги
magereport.com: составление перечня необходимых для установки заплаток SUPEE
#1 Владимир Бонапартов
  • забанен за воровство
  • Группа: Заблокирован
  • Сообщений: 149
  • Регистрация: 23.08.2010

23.08.2010 11:11

При редактировании или создании нового товара выдаёт вот такое сообщение.

Fatal error: Call to a member function setAttribute() on a non-object in /app/code/core/Mage/Eav/Model/Entity/Attribute/Abstract.php on line 374

на английской ветке нашёл ответ, но того кода который они говорят поправить в файлк нет.
http://www.magentocommerce.com/boards/error.php/viewthread/195616/P75/


Подскажите в чём может быть проблема.

#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

23.08.2010 11:50

Стандартна ли ваша сборка Magento, или вы вносили правки в системные файлы?
Обновляли ли сборку через Connect?

#3 Владимир Бонапартов
  • забанен за воровство
  • Группа: Заблокирован
  • Сообщений: 149
  • Регистрация: 23.08.2010

23.08.2010 11:53

да сборка стандартная, устанавливал через Connect.

Вопрос решён.
Можно закрывать тему.

#4 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

23.08.2010 11:55

В чём заключалась проблема?

#5 Владимир Бонапартов
  • забанен за воровство
  • Группа: Заблокирован
  • Сообщений: 149
  • Регистрация: 23.08.2010

23.08.2010 12:00

Открываем /app/code/core/Mage/Eav/Model/Entity/Attribute/Abstract.php

в 374 строке ищем и заменяем :

$this->_source = Mage::getModel($this->getSourceModel())
->setAttribute($this);

на:

if(is_object(Mage::getModel($this->getSourceModel()))){
$this->_source = Mage::getModel($this->getSourceModel())
->setAttribute($this);
}

Далее открываем: /app/code/core/Mage/Adminhtml/Block/Widget/Form.php

в строке 201:

ищем и заменяем:
$element->setValues($attribute->getSource()->getAllOptions(true, true));

на:
if(is_object($attribute->getSource())){
$element->setValues($attribute->getSource()->getAllOptions(true, true));
}


______
Ошибка пропала )))

#6 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

23.08.2010 12:04

Я думаю, у вас в той или иной степени повреждена база.
Ваша заплатка скрывает это, но будьте осторожны: при обновлениях Magento заплатка либо перетрется (если не вынести её в отдельный модуль), либо может вступить в конфликт с новыми версиями движка (если вынести заплатку в отдельный модуль).
Для такого кода конфликты маловероятны, так что второй вариант предпочтительней, я думаю.

#7 Владимир Бонапартов
  • забанен за воровство
  • Группа: Заблокирован
  • Сообщений: 149
  • Регистрация: 23.08.2010

23.08.2010 12:15

Сапасибо за совет. Буду иметь ввиду.

Поделиться темой: