您將要關注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);
有辦法避免構建屬性標籤和值的陣列的腳本開始運行前,但將需要額外的查找和放慢進口。
感謝您的回覆。我的屬性是多選擇類型。你可以更新多個選擇類型屬性的代碼和一件事情。你可以寫這樣的代碼http://www.sonassi.com/knowledge-base/magento-kb/mass-update-stock-levels-in-magento-fast /以便我可以使用我的瀏覽器執行它。 – user2344179
通過瀏覽器進行更新是一個非常糟糕的主意。這意味着超時會讓你半跑步的腳本。儘管代碼非常相似,但由於它更新並保存了產品模型,而不是產品庫存模型(它要輕得多),所以運行速度幾乎不會那麼快。 –
另外,就如何使用多重選擇添加一點點。你需要將這段代碼編寫成一個完整的腳本,但它的全部。 –