需要通过magento中的csv更新属性

时间:2013-06-05 21:07:44

标签: magento

我的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/我改变了以满足我的需求但它不起作用

请帮忙。

提前致谢。

1 个答案:

答案 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);

在脚本开始运行之前,有一些方法可以避免构建属性标签和值数组,但这需要额外的查找并减慢导入速度。