大规模更新特定品类中Magento的价格?

大规模更新特定品类中Magento的价格?,magento,Magento,现在,我要更新我的Magento商店中所有产品的价格的是以下代码片段: $products = Mage::getModel('catalog/product')->getCollection() ->addAttributeToSelect('price') ->addAttributeToSelect('special_price') ; foreach ($products as $product) { $product->setPr

现在,我要更新我的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()或其他什么,但是从来没有找到任何关于这个的文档


请开导我。谢谢大家!

在我的头顶上:

$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();
}

祝你好运。

在我的脑海里:

$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();
}

祝你好运。

这就是我要做的事。您可以直接从类别中获取产品集合。我不是100%确定您确实需要round函数,但是如果您决定使用它,我会确保您在$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();
}

我会这样做的。您可以直接从类别中获取产品集合。我不是100%确定您确实需要round函数,但是如果您决定使用它,我会确保您在$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();
}

这似乎不起作用。所有的产品价格现在都是-1000我做到了。很抱歉,我的意思是指定类别的所有产品价格现在都是-100。因此,它确实按照您的问题所要求/说明的类别进行了更新。这可能是你需要改变的设定价格函数,它破坏了所有的价格。不是责备你,只是想知道为什么你的代码不起作用$product->getPrice()似乎没有返回价格,因此所有价格都改为-100。您似乎正在将价格设置为[special_price-1000]。你确定这就是你想做的吗?也许这就是为什么价格没有设置为你想要的价格。这似乎不起作用。所有的产品价格现在都是-1000我做到了。很抱歉,我的意思是指定类别的所有产品价格现在都是-100。因此,它确实按照您的问题所要求/说明的类别进行了更新。这可能是你需要改变的设定价格函数,它破坏了所有的价格。不是责备你,只是想知道为什么你的代码不起作用$product->getPrice()似乎没有返回价格,因此所有价格都改为-100。您似乎正在将价格设置为[special_price-1000]。你确定这就是你想做的吗?也许这就是为什么价格没有设置为您想要的价格。我想说的是,我觉得确保您执行addAttributeToSelect(“*”)非常重要。我看到过这样的情况:如果加载时产品的其他部分未包含在模型中,则会对其进行更改。特别是能见度。如果在加载模型时未包含,它将更改为其默认值。我想说的是,我觉得确保您执行addAttributeToSelect(“*”)非常重要。我看到过这样的情况:如果加载时产品的其他部分未包含在模型中,则会对其进行更改。特别是能见度。如果在加载模型时未包含,它将更改为其默认值。只是需要注意的东西。