Magento Shopper通过导入CSV更新sku数量仅处理第一条记录

时间:2014-07-24 22:24:38

标签: magento csv import inventory skus

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

以下是我的CSV文件的内容:

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

但是,每次我使用系统>上传它导入/导出>导入>产品:替换现有的,然后它将替换我的所有产品数量:“444”(第一记录)。它只占用CSV的第一行并适用于我的所有产品。

我的产品设置如下:

  1. 红色(简单) - sku_red
  2. 绿色(简单) - sku_green
  3. 蓝色(简单) - sku_blue
  4. Main(与上述3种产品相关的可配置产品)。 - sku_main
  5. 我试图向基础magento网站(非模板)模仿同样的东西,它运作得很好。

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

    或者可能如果你能找到我可以找到的与magento产品导入流程相关的文件(php)?

    谢谢

1 个答案:

答案 0 :(得分: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 = array()重置$ row变量。所以改为启动了这样的数组:

$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 data
  4. $ row data(应该只包含product_id和stock_id)
  5. 所以我们可以假设(没有验证它),如果没有使用$ row = array()重置$ row,那么第一个$行的数据将被用作所有其他行的数据。