我的magento商店中有大约5,000个属性。我已经通过csv.Now上传了所有这些属性。我想通过csv更新一些属性。我可以通过此代码http://www.sonassi.com/knowledge-base/magento-kb/mass-update-stock-levels-in-magento-fast/更新数量属性。< / p>
现在我想要更新由我创建的另一个属性品牌。我发现此代码http://www.blog.magepsycho.com/updating-product-qty-in-magento-in-an-easier-faster-way/我改变了以满足我的需求但它不起作用
请帮忙。
提前致谢。
答案 0 :(得分:0)
您将要关注2个字段,SKU以及您要更新的属性。对于这个例子,我将使用一个文本字段的颜色属性(如果你处理文本字段以外的任何东西,代码会稍微改变)。
首先,由于您可能不想构建一个完整的模块来处理导入,因此您需要在新的PHP文件中初始化magento。在app / Mage.php之前添加magento的完整路径,除非您在magento根目录中运行此脚本。
require_once('app/Mage.php');
umask(0);
Mage::app();
接下来,您需要将CSV文件处理为数组。确保CSV的第一行包含列标题。此功能应该将CSV处理为数组:https://gist.github.com/jaywilliams/385876
包含该脚本后,您可以运行以下内容:
$csv_products = csv_to_array('path/to/your/csv/file.csv');
然后,您可以遍历每个产品,查找SKU并更新其颜色属性。这假设SKU属性为小写sku
,颜色属性为小写color
。
for($i=0;$i<sizeof($csv_products);$i++) {
$currentProduct = Mage::getModel('catalog/product')->loadByAttribute('sku',$csv_products[$i]['sku']);
if($currentProduct) {
$currentProduct->setColor($csv_products[$i]['color']);
$currentProduct->save();
//with 5,000 products you probably want to output something here so
//that you can make sure the script is running. Just make sure that
//you don't lose track of Product not found output (from below).
echo 'Success '.$i. ': ' . $csv_products[$i]['sku'] ."\n";
} else {
//we don't want to break the loop, but you'll probably want to record
//that this sku can't be found in magento. You can just echo this
//since the script will probably be running in the console.
echo 'Product not found: '.$csv_products[$i]['sku']."\n";
}
}
您需要从命令行运行它,因为它可能需要很长时间。当我做了类似的更新aprox 4,000个产品时花了大约2个小时(更多的属性,并使用下拉菜单)。
要使用下拉列表(仍使用颜色示例),您可以在循环浏览产品之前添加类似的内容:
$color_attribute = Mage::getModel('eav/entity_attribute')->loadByCode('catalog_product', 'color');
$loaded_colors = array();
$valuesCollection = Mage::getResourceModel('eav/entity_attribute_option_collection')->setAttributeFilter($color_attribute->getId())->setStoreFilter(Mage_Core_Model_App::ADMIN_STORE_ID, false)->load();
foreach ($valuesCollection as $item) {
$loaded_colors[strtolower($item->getValue())] = $item->getId();
}
然后你可以设置这样的颜色属性:
$currentProduct->setColor($loaded_colors[$csv_products[$i]['color']]);
通过多项选择,您需要为setColor提供CSV。这样的东西可行(假设您的CSV在单个字段中有逗号分隔的选项列表)。
$colorArray = explode(',',$csv_products[$i]['color']);
if(sizeof($colorArray) > 1) {
for($k = 0;$k<sizeof($colorArray);$k++) {
$colorArray[$k] = $loaded_colors[$colorArray[$k]];
}
$colorString = implode(',',$colorArray);
} else {
$colorString = $csv_products[$i]['color'];
}
$currentProduct->setColor($colorString);
在脚本开始运行之前,有一些方法可以避免构建属性标签和值数组,但这需要额外的查找并减慢导入速度。