Magento 无法轻松地批量更改 SKU。尝试通过导入/导出或数据流配置文件执行此操作,您会遇到各种问题。但是,有一种相当简单的方法可以做到这一点,它只需向您的服务器添加一个 php 脚本和一个 SKU 前后的 CSV 文件。这是一步一步的;
注意:在对所有 SKU 进行测试之前,请务必仅使用一两个产品 SKU 进行测试。此外,请务必在尝试此操作之前备份您的数据库。
- 创建包含前后 SKU 的 CSV 文件
在第一列中列出您当前的 SKU,在第二列中列出新的 SKU。
不要在 CSV 文件中包含标题。
确保此文件以 UTF-8 或 ANSI 编码保存为 CSV 文件。如果您使用 Excel 创建文件,您可能会遇到此问题。
将 CSV 文件放在您的服务器上
将 CSV 文件上传到 Magento 服务器上的 var/export 目录,使其路径为 /var/export/sku2sku.csv。
创建 PHP 脚本
在您的服务器上,在您的 Magento 安装目录(您可以看到 app、var、skin、media、js 和其他目录的目录)中,创建一个新文件,保存它,并将其命名为“updateskus.php”。
将以下 php 代码粘贴到 updateskus.php 并保存文件。
<?php
include_once './app/Mage.php';
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$updates_file="./var/export/sku2sku.csv";
$sku_entry=array();
$updates_handle=fopen($updates_file, 'r');
if($updates_handle) {
while($sku_entry=fgetcsv($updates_handle, 1000, ",")) {
$old_sku=$sku_entry[0];
$new_sku=$sku_entry[1];
echo "<br>Updating ".$old_sku." to ".$new_sku." - ";
try {
$get_item = Mage::getModel('catalog/product')->loadByAttribute('sku', $old_sku);
if ($get_item) {
$get_item->setSku($new_sku)->save();
echo "successful";
} else {
echo "item not found";
}
} catch (Exception $e) {
echo "Cannot retrieve products from Magento: ".$e->getMessage()."<br>";
return;
}
}
}
fclose($updates_handle);
?>
- 运行脚本
要运行该脚本,只需使用您的 Internet 浏览器并导航到 http://yoursite.com/updateskus.php。如果您有多站点设置,请使用托管服务提供商设置的主站点或主站点。
当页面打开时,您应该会看到 SKU 已更新的确认消息。您的 SKU 现在应该已成功更新。
如果您已完成 SKU 更新,请删除您添加到服务器的 CSV 和 PHP 文件。
- 错误
如果您遇到以下错误,请不要太担心。只需重新运行脚本,看看是否有更多 SKU 得到更新。
无法从 Magento 检索产品:SQLSTATE[40001]:序列化失败:1213 尝试获取锁时发现死锁;尝试重启事务
如果您有很多 SKU 需要更新,则脚本至少需要几分钟才能完成。