Me ocurre algo rarísimo, que me tiene totalmente descolocado con la versión 1.7.6.1 de PS. Lo explico a continuación, a ver si a alguien se le ocurre cuál puede ser el motivo, porque a mí ya se me acaban las ideas:
Lo que ocurre es lo que digo en el título, cuando se cambia la combinación por defecto de un producto, el cambio no se traslada a la base de datos. Para ser exactos, en la tabla de atributos sí que queda reflejada la nueva combinación por defecto, pero en las tablas de productos (ps_product y ps_product_shop), en el campo "cache_default_attribute" no se refleja el cambio.
He rastreado el código de la clase Product y he visto que el cambio debería producirse en el método updateDefaultAttribute, cuyo código es éste:
public static function updateDefaultAttribute($id_product) { $id_default_attribute = (int) Product::getDefaultAttribute($id_product, 0, true); $result = Db::getInstance()->update('product_shop', array( 'cache_default_attribute' => $id_default_attribute, ), 'id_product = ' . (int) $id_product . Shop::addSqlRestriction()); $result &= Db::getInstance()->update('product', array( 'cache_default_attribute' => $id_default_attribute, ), 'id_product = ' . (int) $id_product); if ($result && $id_default_attribute) { return $id_default_attribute; } else { return $result; } }
El método se ejecuta al modificar el producto y el valor de $id_default_attribute que se obtiene en la primera línea del método es el correcto (lo he dumpeado), pero simplemente no se traslada a las tablas de la base de datos. Es más, he intentado forzarlo añadiendo esto dentro del método:
$sql = 'UPDATE ps_product SET cache_default_attribute='.$id_default_attribute.' WHERE id_product='.$id_product; Db::getInstance()->execute($sql); exit();
... pero simplemente no actualiza la base de datos y no se modifica el valor que tiene en la columna cache_default_attribute. Si ejecuto exactamente la misma consulta desde el PHPMyAdmin se realizan los cambios correctamente.
¿A alguien se le ocurre por qué puede ser?