【问题标题】:Magento - Mass updating of stock levels failsMagento - 库存水平的大规模更新失败
【发布时间】:2012-08-13 05:13:31
【问题描述】:

我正在尝试将以下代码与最新的 Magento V1.7.1 一起使用:

http://www.sonassi.com/knowledge-base/magento-kb/mass-update-stock-levels-in-magento-fast/

我从 CSV 文件更新库存数量。

它适用于以下字段:

"sku","qty"
"prod1","11"

但是,如果有任何附加字段,它就不起作用。

我试过了:

"sku","qty","is_in_stock" 
"prod1","11","1"

然后qty 得到更新,但is_in_stockqty 后面的任何其他字段没有被导入到数据库中。

我尝试切换字段并尝试了以下操作:

"sku","is_in_stock","qty"
"prod1","1","11"

现在is_in_stock 得到更新,但qty 没有。

说明说要使用至少两个加上列出的任何附加字段,但它不起作用。

你能分享更新的代码吗?

谢谢。

【问题讨论】:

  • 我将您发布的 CSV 行中的左 () 和右 () 双引号替换为常规双引号 (")。您是否将 CSV 行 1:1 直接从文件复制到帖子中?
  • 是的..我直接从 CSV 文件中复制了它。所以编码是正确的,问题可能出在 CSV 上?
  • 这是我的 CSV 的 1:1 直接副本
  • "sku","qty","is_in_stock" "test","99","1"

标签: magento stocks


【解决方案1】:

我不知道上面提到的导入扩展,但很可能它会像 Magento 一样使用 fgetcsv() 调用来读取 CSV 文件。

fgetcsv() 函数默认使用正则 (", Shift+2) 双引号作为包围分隔符。

如果您真的将 CSV 文件中的 CSV 行 1:1 复制到这篇文章中,每行最多包含 三个不同的包围分隔符 (“, ” and "),那么 fgetcsv() 没有机会正确返回字段值。

要解决此问题,只需将 CSV 文件中的所有双引号替换为常规双引号,然后保存并再次导入。

【讨论】:

  • 我认为“, ”是我在复制和粘贴时出现的。我检查了所有附件,它们都是正确的“。当我运行脚本时,它没有给出任何错误。它成功完成了该过程,但数量已更新,但没有更新。
  • 我刚刚使用 "sku","qty","is_in_stock""911","100","1" 检查了 EE 1.11 下的扩展代码(手头没有 CE 1.7.1,抱歉),其中 911 是现有产品。工作正常。所以这可能是字符编码、数据库损坏或 Magento 版本问题。
  • 我发现每一行的末尾都有空格。例如,第二行“911”、“100”、“1”在“1”之后有大约 25 个空格,这导致了问题。有没有办法在 PHP 中修剪它?我可以看到命令 trim 会修剪字符串,但这是在行尾而不是在字符串内,所以我不知道该怎么做。
  • 为什么你会尝试使用 PHP 修剪这些行?您正在使用手动创建的 CSV 测试文件。只需使用文本编辑器打开 CSV 文件,删除行尾的空格并再次保存。
  • CSV 文件由我们的 POS 系统每晚生成,然后自动上传,然后 cron 作业每天更新库存......所以我不希望任何人打开文件。它应该每天都是自动化的,所以每天晚上都会更新库存。
【解决方案2】:

请记住,根据您的操作系统,行尾并不总是相同的。 Windows 编辑器有一个讨厌的习惯,即在每一行的末尾添加一个额外的回车(当我用 C++ 为这类工作编写 Linux 解析器时,我很难学到这一点)。最好使用 Notepad++ 之类的工具检查您的 csv,以查看每条记录末尾的内容。

我建议使用 Magmi 进行诸如此类的简单更新。设置需要一点点努力(但有非常可靠的文档可以引导您完成整个过程),但是一旦完成,它就会快速、稳定并且包含许多额外的插件,您可以使用这些插件来获得更多功能,而不仅仅是库存更新未来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多