Фатальная ошибка Magento:Вызов функции-члена getSku() для не-объекта

StackOverflow https://stackoverflow.com/questions/1801311

Вопрос

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

Полный текст сообщения об ошибке выглядит следующим образом:

Фатальная ошибка: Вызов функции-члена getSku() для не-объекта в /path/on/server/app/code/core/Mage/Catalog/Model/Product/Option/Type/Select.php в строке 221.

Теперь другие получили это сообщение об ошибке - оно было устранено и предположительно исправлено в дорожной карте 1.3.1 (http://www.magentocommerce.com/roadmap/release/1.3.1).Однако обстоятельства появления этих других сообщений об ошибках были таковы, что они пытались добавить товар в корзину - если у товара были пользовательские параметры, он переходил к этому сообщению об ошибке.

Моя ситуация такова, что у меня есть ПРОСТОЙ элемент - не связанный и не настраиваемый - без каких-либо пользовательских опций.Я могу добавить его в корзину без каких-либо проблем.Но если я пройду всю процедуру оформления заказа, то после оформления заказа на белом экране появится сообщение об ошибке.URL-адрес в браузере показывает мне, что я нахожусь на странице успешного оформления заказа.

И, похоже, заказ проходит безукоризненно, регистрируясь как Magento, так И Authorize.net.

Я пытался отладить ошибку, насколько это было в моих силах, но это поставило меня в тупик.

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

Я собираюсь продолжить тестирование, но если у кого-нибудь есть КАКИЕ-НИБУДЬ яркие идеи о том, почему это происходит, я был бы рад услышать ваши мысли.Я так близок к запуску, и эта штука может поставить крест на всем этом.

Это было полезно?

Решение

У меня уже была эта ошибка раньше, и я также не получал никаких указаний о том, как ее решить.Итак, мне пришлось изменить основные файлы, чтобы исправить сообщение об ошибке.Проблема в том, что Mage_Catalog_Model_Product_Option::getValueById() может возвращать нулевое значение, НО Catalog/Model/Product/Option/Type/Select.php не проверяет такую возможность.

Вот решение, которое сработало для меня:

Открыть app/code/core/Mage/Catalog/Model/Product/Option/Type/Select.php

Измените строку 121 с:

$result = $option->getValueById($optionValue)->getSku();

Для:

$o= $option->getValueById($optionValue);
$result = is_object($o) ? $o->getSku() : null;

Я всегда терпеть не могу менять основные файлы, но когда возникает ошибка, я мало что могу сделать!

Другие советы

Я выполнил те шаги, которые опубликовал pygorex1, но также заменил строки 191-195 в Select.php файл, потому что я все еще получал другую подобную ошибку о getPrice().У меня есть версия Magento.1.3.2.4.

Исходный код из строк 191-195:

$result = $this->_getChargableOptionPrice(
$option->getValueById($optionValue)->getPrice(),
$option->getValueById($optionValue)->getPriceType() == 'percent',
$basePrice
);

Вот код, который я создал для замены строк 191-195:

$z= $option->getValueById($optionValue);
$result = is_object($z) ? $z ->getPrice() : null;

$zz = $option->getValueById($optionValue);
$result = is_object($zz) ? $zz ->getPriceType() == 'percent' : $basePrice;

К вашему сведению - я НЕ PHP-программист.Я просто случайно выяснил, как переработать код, чтобы устранить эту проблему на основе кода pygorex1.Так что, есть большая вероятность, что я написал это неправильно.Тем не менее, это решило проблему для меня (чем я очень горжусь :)

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

Исправлены три файла, так что продукт просто удалялся при редактировании такого заказа - все модификации работали в "локальной" области, поэтому основные файлы оставались нетронутыми:

1.приложение/код/локальный/Mage/Каталог/Модель/Продукт/Опция/Тип/Выбрать.php:221

(поиск)

$result = $option->getValueById($optionValue)->getSku();

(добавить)

/* hotfix for - PHP Fatal error:  Call to a member function getSku() on a non-object - occurs on admin order edit if a product option has been removed */
if (is_null($option->getValueById($optionValue))) {
    throw new Exception('missing product option');
}

2.приложение/код/локальный/Mage/Продажи/Модель/Цитата.php:695

(поиск)

$item = $this->_addCatalogProduct($candidate, $candidate->getCartQty());

(заменить)

/* hotfix for - PHP Fatal error:  Call to a member function getSku() on a non-object - occurs on admin order edit if a product option has been removed */
try {
    $item = $this->_addCatalogProduct($candidate, $candidate->getCartQty());
} catch ( Exception $e ) {
    if ($e->getMessage()=='missing product option') { return null; }
        throw new Exception($e->getMessage());
}

3.app/code/local/Mage/Adminhtml/Модель/Продажи/Заказ/Создать.php:288

(поиск)

if (is_string($item)) {
    return $item;
}

(заменить)

if (is_string($item)) {
    return $item;
/* hotfix for - PHP Fatal error:  Call to a member function getSku() on a non-object - occurs on admin order edit if a product option has been removed */
} elseif (is_null($item)) {
    return $this;
}

Ну, у меня была такая же ошибка для моего клиента, Magento нормально работал на одном сервере, но не на другом, поэтому я подумал, что, должно быть, что-то не так с новой установкой (после миграции).Я не играл с кодом, просто починил базу данных, и она начала работать должным образом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top