4

当我使用以下saveRow方法点击可配置产品时出现以下错误/app/code/local/Mage/Catalog/Model/Convert/Adapter/Productimport.php

[05-Jul-2011 18:12:32] PHP Fatal error:  Call to undefined method Mage_Catalog_Model_Product_Type_Simple::getConfigurableAttributesAsArray() in /home/gp/public_html/app/code/local/Mage/Catalog/Model/Convert/Adapter/Productimport.php on line 107

我的问题与我在网上遇到的其他问题有点不同,也许是因为我是saveRow()从我自己的脚本调用的,该脚本正在构建和维护产品列表,通过 xml 提要从我的供应商处下载,然后使用临时数据库magento在我的网站目录中添加或更新它们。

require_once($_SERVER['DOCUMENT_ROOT']."/app/code/local/Mage/Catalog/Model/Convert/Adapter/Productimport.php");
$MageProducts = new Mage_Catalog_Model_Convert_Adapter_Productimport();
...
...
foreach($products as $product) {
    $result = $MageProducts->saveRow($product);
}

我第一次点击可配置产品时会收到此错误,但如果我立即点击刷新,脚本会直接通过该产品并一直运行到最后,在其途中传递许多简单/可配置的产品集,而不会失败。

ProductImport.php 的第 107 行就是这一行

$cspa  = $product->getTypeInstance()->getConfigurableAttributesAsArray($product);

出于某种原因,它$product->getTypeInstance正在返回Mage_Catalog_Model_Product_Type_Simple,但只是会话中的第一次?!

如果我print_r($product->getTypeInstance())在该行之前添加,我会得到以下可配置产品

Mage_Catalog_Model_Product_Type_Simple Object ( [_product:protected] => Mage_Catalog_Model_Product Object ( [_cacheTag:protected] => catalog_product [_eventPrefix:protected] => catalog_product [_eventObject:protected] => product [_canAffectOptions:protected] => [_typeInstance:protected] => Mage_Catalog_Model_Product_Type_Simple Object *RECURSION* [_typeInstanceSingleton:protected] => Mage_Catalog_Model_Product_Type_Configurable Object ( [_usedProductAttributeIds:protected] => _cache_instance_used_product_attribute_ids....

这显然是错误的......

我希望能够通过 cron 使用我的脚本,但是这个错误阻止了我这样做,所以我迫切需要一些帮助来修复 - 任何人都可以提供一些建议吗?

4

2 回答 2

6

在这之前:

$product->getTypeInstance()->getConfigurableAttributesAsArray($product);

检查$product->isConfigurable();。如果是,只运行:

$product->getTypeInstance()->getConfigurableAttributesAsArray($product);
于 2015-02-10T13:03:21.550 回答
0

我知道很久以前就有人问过这个问题,但仍然适用于将来面临这个问题的任何人。我几乎挣扎了一周,并尝试了在互联网上找到的不同解决方案。最后我们开始了,问题是我有一个简单的产品,它与我试图导入的可配置产品具有相同的 sku。

于 2014-09-04T10:08:18.707 回答