Мне нужно просмотреть все продукты в определенной категории, изменить пользовательский атрибут и затем сохранить каждый продукт.
В настоящее время у меня есть:
$_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 товаров, поэтому сейчас нужно найти хорошую производительность
Если вы делаете массовое обновление с тем же атрибутом и тем же значением, попробуйте 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);
Это должно быть намного быстрее.
Других решений пока нет …