2012-06-02 52 views
1

現在我有什麼更新的所有產品的價格在我的Magento商店是這個片段:Magento在特定類別中的批量更新價格?

$products = Mage::getModel('catalog/product')->getCollection() 
    ->addAttributeToSelect('price') 
    ->addAttributeToSelect('special_price') 
    ; 
foreach ($products as $product) { 
    $product->setPrice(round($product->getPrice() - 1000.00)); 
    $product->setSpecialPrice(round($product->getSpecialPrice() - 1000.00)); 
    $product->save(); 
} 

我的問題是如何更新的所有產品中的特定類別,而不是整個賣場?我想應該有更多的選擇器,如 - > addCategoryToSelect()或其他東西,但從來沒有找到任何有關這方面的文件。

請賜教。謝謝!

回答

1

這將是我會這樣做的方式。您可以直接從該類別獲得一系列產品。我不是100%確定你確實需要這個循環函數,但是如果你決定使用它,我會確保你在$ product-> getPrice() - 1000附近放置括號,以確保它在之前被計算它被髮送到該功能。我選擇不把它包含在我的答案中,因爲我認爲你不需要它。

試試這個:

$products = Mage::getModel('catalog/category') 
    ->load($category_id) 
    ->getProductCollection() 
    ->addAttributeToSelect('*'); 

foreach($products as $product) { 
    $product->setPrice(($product->getPrice() - 1000))); 
    $product->setSpecialPrice(($product->getSpecialPrice() - 1000))); 
    $product->save(); 
} 
+0

我確實想說,我認爲確保您執行addAttributeToSelect('*')是非常重要的。我發現如果產品的其他部分在加載時未包含在模型中,則會發生更改。具體可見度。如果在加載模型時未包括,它將更改爲默認值。只是要留意一下。 –

0

關閉我的頭頂:

$category = Mage::getModel('catalog/category')->load($categoryId); 
$productCollection = Mage::getResourceModel('catalog/product_collection') 
         ->addCategoryFilter($category); 

foreach ($productCollection as $product) { 
    $product->setPrice(round($product->getPrice() - 1000.00)); 
    $product->setSpecialPrice(round($product->getSpecialPrice() - 1000.00)); 
    $product->save(); 
} 

好運。

+0

這似乎並沒有工作。現在所有的產品價格都是-1000 –

+0

您是否設置了正確的$ categoryId? –

+0

我做到了。對不起,我的意思是指定類別的所有產品價格現在是-100。 –