以编程方式使用 .csv 更新产品价格
-
12-12-2019 - |
题
我的问题一开始比较广泛,但稍后我会更详细。我有大约 3000 种产品,其中的 SKU 和价格位于 .csv 文件中。现在价格最近发生了变化,我想上传/更新这些产品的价格。有没有使用 SOAP API 通过脚本快速完成此操作的方法?
或者有更简单的方法来解决这个问题吗?
更新我用过这个功能 http://www.blog.magepsycho.com/updating-product-prices-in-magento-in-easier-faster-way/ 但现在价值和价格不匹配。是否有更好的选择来处理 csv,然后将每个 sku 的价格与价格进行匹配。
解决方案
我认为使用 SOAP 服务不会快速满足您的需要。我的意思是它可能会工作,但对于 3k 产品来说会非常慢。
相反,尝试这个脚本。
假设您的 csv 有 2 列。SKU 和价格。
$skuIndex = 0;
$priceIndex = 1;
$csv = 'path/to/file.csv';
$io = new Varien_Io_File();
//an array to keep the products by price
$productIdsByPrice = array();
//a product model instance
$productModel = Mage::getSingleton('catalog/product');
//read the csv
$io->streamOpen($csv, 'r+');
while($csvData = $io->streamReadCsv()){
if (count($csvData) < 2) { //skip rows with less than 2 columns
continue;
}
$sku = trim($csvData[$skuIndex]);
//get the product id by sku
$id = $productModel->getIdBySku($sku);
if ($id) {
//if the id exists then mark it for update
$price = trim($csvData[$priceIndex]);
if (!isset($productIdsByPrice[$price])) {
$productIdsByPrice[$price] = array();
}
$productIdsByPrice[$price][] = $id;
}
}
//now you should have the product ids you need to update grouped by price
//just do the fast update
foreach ($productIdsByPrice as $price => $ids) {
Mage::getSingleton('catalog/product_action')->updateAttributes(
$ids, //what products to update
array('price' => $price), //what attributes to update
0 //store id for update
)
}
您可以将此代码放置在您的自定义模型或助手之一中,然后运行它。您可能需要仔细检查代码。我还没有测试过。还要备份您的数据库。
[编辑]
如果您从文件运行此命令,请创建一个名为 price_update.php
与 index.php
并在其中添加以下内容:
<?php
error_reporting(E_ALL | E_STRICT);
define('MAGENTO_ROOT', getcwd());
$mageFilename = MAGENTO_ROOT . '/app/Mage.php';
require_once $mageFilename;
Mage::setIsDeveloperMode(true);
ini_set('display_errors', 1);
umask(0);
Mage::app();
之后,添加上面解析 csv 的代码并在浏览器中调用 MAGE_ROOT/price_update.php
.
其他提示
刚刚创建可用性,价格,成本CSV-UPDATER。 有兴趣开发或贡献,所以在这里发布它。
http://lycenok.com/magento-extensions/magento-csv-product-updater.html https://github.com/lycenok/magento_csv_product_updater
关于,Eugene。
更新:记住关于简单解决方案,在Magento本身实现。
system - >导入/导出 - >“dataflow - 配置文件”