从CSV更新Magento的库存水平


Updating Stock Levels in Magento from a CSV

我有一个脚本,它将根据匹配的SKU更新Magento中的库存数量。只要CSV中的标题与他们正在更新的Magento中的字段匹配,这就可以正常工作,例如

库存单位,数量

ABC123,20

ABC124,20

然而,我的来源CSV标题被命名为"产品id"answers"数量",例如

产品id,数量

ABC123,20

ABC124,20

如何重新映射数组关键字名称,以便导入可以工作?

require_once '../app/Mage.php';
 umask(0);
 Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
 $count = 0;
$file = fopen('/home/public_html/mysite/csvs/my.csv', 'r');
 while (($line = fgetcsv($file)) !== FALSE) {
 if ($count == 0) {
 foreach ($line as $key=>$value) {
 $cols[$value] = $key;
 }
 }
 $count++;
 if ($count == 1) continue;
 #Convert the lines to cols
 if ($count > 0) {
 foreach($cols as $col=>$value) {
 unset(${$col});
 ${$col} = $line[$value];
 echo ${$col};
 }
 }
 //print_r($cols); die();
 // Check if SKU exists
 $product = Mage::getModel('catalog/product')->loadByAttribute('sku',$sku);
 if ( $product ) {
 $productId = $product->getId();
 $stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($productId);
 $stockItemId = $stockItem->getId();
 $stock = array();
 if (!$stockItemId) {
 $stockItem->setData('product_id', $product->getId());
 $stockItem->setData('stock_id', 1);
 } else {
 $stock = $stockItem->getData();
 }
 foreach($cols as $col=>$value) {
 $stock[$col] = $line[$value];
 }
 foreach($stock as $field => $value) {
 $stockItem->setData($field, $value?$value:0);
 }

 $stockItem->save();
 unset($stockItem);
 unset($product);
 }
 echo "<br />Stock updated $sku";
 }
 fclose($file);

您可以尝试下面的文章,它非常有效:
http://www.blog.magepsycho.com/updating-product-qty-in-magento-in-an-easier-faster-way/
它只是基于原始sql查询,即使对于数百万sku的数量更新也非常快速。

感谢