2012-06-02 32 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。 –