Magento — просматривайте все продукты в категории, изменяйте стоимость и сохраняйте

Мне нужно просмотреть все продукты в определенной категории, изменить пользовательский атрибут и затем сохранить каждый продукт.

В настоящее время у меня есть:

$_category = Mage::getModel('catalog/category')->load($_POST['id']);
$all_products = $_category->getProductCollection();

foreach ($all_products as $product) {
$product = Mage::getModel('catalog/product')->load($product->getId());
$product->setCustomAttribute(xxxx);
$product->save();
}

Это лучшая практика и можно ли ее улучшить для повышения производительности? Коллекции в среднем содержат около 15-20 товаров в каждом, и у меня очень медленное время загрузки или даже тайм-аут сценария.

Я использовал set_time_limit(0); чтобы попытаться заставить это пройти, но я представляю, что могу улучшить свой код, чтобы мне не пришлось это делать? В конечном итоге в коллекциях может быть более 100-200 товаров, поэтому сейчас нужно найти хорошую производительность

1

Решение

Если вы делаете массовое обновление с тем же атрибутом и тем же значением, попробуйте updateAttributes:

// Iterate over the foreach and get all the product ids into an array
// $attr = array("attribute_code" => "attribute_value");
Mage::getSingleton("catalog/product_action")->updateAttributes($productIds, $attr, $storeId);

Это должно быть намного быстрее.

1

Другие решения

Других решений пока нет …