我在Magento商店发现了一个奇怪的错误,尽管我在网上查询,但在同样的情况下似乎没有人见过这个确切的错误。 Lemme'splain。
错误消息的全文如下:
致命错误:在/ path / on / server / app / code / core / Mage / Catalog / Model / Product / Option /上的非对象上调用成员函数getSku()在221行输入/ Select.php。
现在,其他人已收到此错误消息 - 已在1.3.1路线图(http://www.magentocommerce.com/roadmap/release/1.3.1)中解决了该问题。但是,这些其他错误消息的情况是他们尝试将项目添加到购物车的位置 - 如果该项目具有自定义选项,则会循环显示此错误消息。
我的情况是我有一个SIMPLE项目 - 没有捆绑或可配置 - 没有任何自定义选项。我可以毫无困难地将它添加到购物车中。但是,如果我完成整个结账程序,在下订单时,错误消息会出现在白色屏幕上。浏览器中的URL显示我正在结帐成功页面上。
并且,订单似乎完美无缺,由Magento和Authorize.net注册。
我尽可能地尝试调试错误,但是这个让我感到难过。
供参考,我在Magento 1.3.2.4。当我第一次收到错误时,我重新安装了所有核心文件,但仍能够复制错误。
我将继续测试,但如果有人对于为什么会发生这种情况有任何明智的想法,我很乐意听到你的想法。我已经离发射很近了,这件事可以让整个事情发生变化。
答案 0 :(得分: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;
我总是讨厌更改核心文件,但是当出现错误时,我无能为力!
答案 1 :(得分:2)
我遵循pygorex1发布的步骤,但也替换了Select.php
文件中的第191-195行,因为我仍然收到关于getPrice()
的另一个类似错误。我有Magento ver。 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的代码修复此问题。所以,我很有可能没有正确地写它。但是,它确实解决了我的问题(我为此感到自豪:)
答案 2 :(得分:0)
遇到同样的问题。回溯它并确定在管理员编辑订单时我发生了这种情况,并且该订单包含至少一个产品,其中包含自下订单后已删除的单个选项。
修正了三个文件,以便在编辑这样的订单时简单地删除产品 - 所有修改都在“本地”范围内工作,因此核心文件保持不变:
<强> 1。应用程序/代码/本地/法师/目录/型号/产品/尺码/类型/ 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。应用程序/代码/本地/法师/销售/型号/ 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。应用程序/代码/本地/法师/ 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;
}
答案 3 :(得分:0)
好吧,我的客户端遇到了同样的错误,Magento在一台服务器上正常工作但在另一台服务器上运行不正常,所以我认为新安装(迁移后)一定有问题。我没有玩代码,只是修复了数据库,它开始正常工作。