2013-06-05 38 views
2

我有大約5,000個屬性在我的magento商店。我已經通過csv.Now上傳了所有這些。我想通過csv.I更新一些屬性。我可以通過更新數量屬性此代碼http://www.sonassi.com/knowledge-base/magento-kb/mass-update-stock-levels-in-magento-fast/需要更新一個屬性通過csv在magento

現在我想更新由我。我創建了一個多個屬性的品牌發現這個代碼http://www.blog.magepsycho.com/updating-product-qty-in-magento-in-an-easier-faster-way/我改變了適合我的需要,但它沒有工作

請幫助。

在此先感謝。

回答

0

您將要關注2個領域,SKU和您將要更新的屬性。在這個例子中,我將使用一個文本字段的顏色屬性(如果您處理的不是文本字段,代碼會稍微改變)。

首先,由於您可能不想構建完整的模塊來處理導入,因此您需要在新的PHP文件中初始化magento。在app/Mage.php之前添加magento的完整路徑,除非您在magento根目錄中運行此腳本。

require_once('app/Mage.php'); 
umask(0); 
Mage::app(); 

接下來,您需要將CSV文件處理爲數組。確保CSV的第一行包含列標題。一旦該腳本包含你可以運行像這樣https://gist.github.com/jaywilliams/385876

$csv_products = csv_to_array('path/to/your/csv/file.csv'); 

然後,您可以通過每個產品的循環,查找的SKU和更新此功能應小心處理CSV文件中的數組它的顏色屬性。這假設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 4000產品時,花了大約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(); 
} 

那麼你可以設置一個顏色屬性是這樣,而不是:

​​

使用多選功能,您需要提供CSV給setColor。像這樣的東西會起作用(假設你的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); 

有辦法避免構建屬性標籤和值的陣列的腳本開始運行前,但將需要額外的查找和放慢進口。

+0

感謝您的回覆。我的屬性是多選擇類型。你可以更新多個選擇類型屬性的代碼和一件事情。你可以寫這樣的代碼http://www.sonassi.com/knowledge-base/magento-kb/mass-update-stock-levels-in-magento-fast /以便我可以使用我的瀏覽器執行它。 – user2344179

+0

通過瀏覽器進行更新是一個非常糟糕的主意。這意味着超時會讓你半跑步的腳本。儘管代碼非常相似,但由於它更新並保存了產品模型,而不是產品庫存模型(它要輕得多),所以運行速度幾乎不會那麼快。 –

+0

另外,就如何使用多重選擇添加一點點。你需要將這段代碼編寫成一個完整的腳本,但它的全部。 –