0

我不确定发生了什么,但使用此模板 (queldorei.com) 我无法使用 CSV 导入更新数量。

这是我的 CSV 文件的内容:

sku,qty
sku_red,444
sku_green,222
sku_blue,333

但是,每次我使用System > Import/Export > Import > Products : Replace Existing上传它时,它将替换我所有的产品数量:“444”(第一条记录)。它只占用 CSV 的第一行并适用于我的所有产品。

我的产品设置是:

  1. 红色(简单)- sku_red
  2. 绿色(简单)- sku_green
  3. 蓝色(简单)- sku_blue
  4. 主要(与上述 3 个产品相关的可配置产品)。- sku_main

我试图在基本的 magento 网站(非模板)上模拟同样的东西,它运行良好。

你能告诉我如何解决这个问题吗?

或者,如果您可以找到我可以查找的与 magento 产品导入过程相关的文件(php)?

谢谢

4

1 回答 1

1

我刚刚遇到了同样的问题。我不知道有多少个版本的 magento 有同样的问题,但你可以app/code/core/Mage/ImportExport/Model/Import/Entity/Product.php在 1608 附近的某处的文件和行中修复它。

要在不使用行号的情况下找到该位置,只需转到方法“_saveStockItem”。您将在那里看到 magento 如何为每一行创建数据。主要问题从这里开始:

$row['product_id'] = $this->_newSku[$rowData[self::COL_SKU]]['entity_id'];

产品数据正在那个地方启动,但开发人员忘记用 重置 $row 变量$row = array()。因此,而是像这样启动了数组:

$row = array(
    'product_id' => $this->_newSku[$rowData[self::COL_SKU]],
    'stock_id'   => 1
);

我们有:

$row = array(
    // last $row data ( for instance qty )
    // plus two lines below which don't reset array...
    'product_id' => $this->_newSku[$rowData[self::COL_SKU]],
    'stock_id'   => 1
);

在接下来的几行中,magento 按顺序合并数组:

  1. $defaultStockData
  2. 产品库存数据(来自数据库,如果存在)
  3. csv数据
  4. $row 数据(应该只包含 product_id 和 stock_id )

所以我们可以假设(无需验证),如果 $row 没有用 $row = array() 重置,那么来自第一个 $row 的数据将用作所有其他行的数据。

于 2015-01-26T18:10:28.870 回答