Hay dos formas de hacerlo, una es obtener el catalog/product
modelo de Magento y cargar el producto por ID que le dará el producto completo, luego establecer el nombre y guardarlo.
$product = Mage::getModel('catalog/product')->load(1);
$product->setName('foobar!');
try {
$product->save();
} catch(Exception $e) {
echo "{$e}";
}
Como OP señaló, esto es bastante pesado solo para cambiar un atributo. Me imaginé que la herramienta de actualización masiva de atributos debería usar una forma más limpia de hacer esto y encontré la Mage_Catalog_Model_Resource_Product_Action
clase
$product_id = 1;
$store_id = 0;
$action = Mage::getModel('catalog/resource_product_action');
$action->updateAttributes(array($product_id), array(
'name' => 'foobar!'
), $store_id);
[ACTUALIZACIÓN] punto de referencia
También lo hizo un script de referencia rápido y los resultados hablan por sí mismos.
$starttime = microtime(true);
for ($i=20; $i>0; $i--)
{
$action = Mage::getModel('catalog/resource_product_action');
$action->updateAttributes(array(1), array(
'name' => 'foobar!'
), 0);
}
echo "Time: " . (microtime(true) - $starttime) . " seconds\n";
$starttime = microtime(true);
for ($i=20; $i>0; $i--)
{
$product = Mage::getModel('catalog/product')->load(1);
$product->setName('foobar!');
$product->save();
unset($product);
}
echo "Time: " . (microtime(true) - $starttime) . " seconds\n";
Tiempo: 0.076527833938599 segundos
Tiempo: 4.757472038269 segundos