1

我在我正在开发的 Magento 商店中遇到了一个奇怪的错误,尽管我在网上进行了查询,但似乎没有其他人在相同的情况下看到过这个确切的错误。让我解释一下。

错误消息的全文是这样的:

致命错误:在第 221 行的 /path/on/server/app/code/core/Mage/Catalog/Model/Product/Option/Type/Select.php 中的非对象上调用成员函数 getSku()。

现在,其他人收到了这个错误消息——它已在 1.3.1 路线图 ( http://www.magentocommerce.com/roadmap/release/1.3.1 )中得到解决和修复。然而,那些其他错误消息的情况是他们试图将一个项目添加到购物车——如果该项目有自定义选项,它将循环到这个错误消息。

我的情况是我有一个简单的项目——没有捆绑或可配置——没有任何自定义选项。我可以毫不费力地将它添加到购物车中。但是,如果我运行整个结帐程序,在下订单时,错误消息会出现在白色屏幕上。浏览器中的 URL 显示我在结帐成功页面上。

并且,订单似乎完美地通过了,同时被 Magento 和 Authorize.net 注册。

我已经尽我所能尝试调试错误,但这让我很难过。

作为参考,我在 Magento 1.3.2.4 中。当我第一次收到错误时,我重新安装了所有核心文件并且仍然能够复制错误。

我将继续测试,但如果有人对为什么会发生这种情况有任何好的想法,我很想听听你的想法。我离发射太近了,这件事可能会把整个事情搞得一团糟。

4

4 回答 4

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;

我总是讨厌更改核心文件,但是当出现错误时,我无能为力!

于 2009-11-26T03:16:31.457 回答
2

我遵循了 pygorex1 发布的步骤,但也替换了Select.php文件中的第 191-195 行,因为我仍然收到关于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 的代码重新编写代码以解决此问题。所以,很有可能我写得不对。但是,它确实为我解决了问题(我为此感到自豪:)

于 2010-09-10T06:03:49.423 回答
0

遇到同样的问题。回溯它并确定它发生在我在管理员中编辑订单时,并且该订单包含至少一个带有单个选项的产品,该选项在下订单后被删除。

然后修复了三个文件,以便在编辑此类订单时简单地删除产品 - 所有修改都在“本地”范围内工作,因此核心文件保持不变:

1.app/code/local/Mage/Catalog/Model/Product/Option/Type/Select.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.app/code/local/Mage/Sales/Model/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. app/code/local/Mage/Adminhtml/Model/Sales/Order/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;
}
于 2010-02-11T05:26:34.590 回答
0

好吧,我的客户遇到了同样的错误,Magento 在一台服务器上工作正常,但在另一台服务器上却不行,所以我认为新安装(迁移后)一定有问题。我没有玩代码,只是修复了数据库,它开始正常工作。

于 2012-09-21T21:26:13.833 回答