Magento Fatal Error: вызов функции-члена getSku () для необъекта - PullRequest
1 голос
/ 26 ноября 2009

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

Полный текст сообщения об ошибке:

Неустранимая ошибка: Вызов функции-члена 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. Когда я впервые получил сообщение об ошибке, я переустановил все основные файлы и все еще смог воспроизвести ошибку.

Я собираюсь продолжить тестирование, но если у кого-нибудь есть ЛЮБЫЕ яркие идеи о том, почему это происходит, я хотел бы услышать ваши мысли. Я так близок к запуску, и эта штука может поставить в тупик все это.

Ответы [ 4 ]

4 голосов
/ 26 ноября 2009

У меня уже была эта ошибка, и я также не получал никаких сообщений о том, как ее исправить. Итак, мне пришлось изменить файлы ядра, чтобы исправить сообщение об ошибке. Проблема в том, что 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;

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

2 голосов
/ 10 сентября 2010

Я следовал тем шагам, которые 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. Так что есть большая вероятность, что я не правильно написал. Тем не менее, это решило проблему для меня (которой я горжусь:)

0 голосов
/ 22 сентября 2012

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

0 голосов
/ 11 февраля 2010

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

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

1. Приложение / код / ​​местные / Mage / Каталог / Модель / Продукт / Вариант / Тип / Select.php: 221

(поиск)

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

(PREPEND)

/* 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 / Продажа / Модель / Quote.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. Приложение / код / ​​местные / Mage / Adminhtml / модель / Продажа / Заказ / create.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;
}
...