Jump to content

No se actualiza combinación por defecto al cambiarla en un producto


Prestafan33

Recommended Posts

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?

Edited by Prestafan33 (see edit history)
Link to comment
Share on other sites

Bueno, pues después de un montón de tiempo investigando, no he podido dar con la causa. He tenido que improvisar una solución de emergencia, que ha sido hacer un override del método "update" de la clase Product para, una vez el producto se ha actualizado, forzar la actualización del campo "cache_default_attribute" en las tablas de producto:

/* Fuerza la actualización de la combinación por defecto al actualizar un producto */
class Product extends ProductCore
{
  public function update($null_values = false)
  {
    $return = parent::update($nul_values);
    
    $id_default_attribute = (int) Product::getDefaultAttribute($this->id, 0, true);
    if ($id_default_attribute) {
      $databaseInstance = Db::getInstance();
      $sql = 'UPDATE `ps_product_shop` SET `cache_default_attribute`='.$id_default_attribute.' WHERE `id_product`='.$this->id.' AND `id_shop`='.$this->id_shop_default;
      $databaseInstance->execute($sql);
      $sql = 'UPDATE `ps_product` SET `cache_default_attribute`='.$id_default_attribute.' WHERE `id_product`='.$this->id;
      $databaseInstance->execute($sql);
    }

    return $return;
  }
}

Así he conseguido que se actualice. Sin embargo, colocando las mismas consultas dentro de los métodos updateDefaultAttribute() y updateAttribute() no he conseguido que funcione (de hecho, ya se realizan ahí por defecto los UPDATES, pero sin ningún resultado en la base de datos).

Si a alguien se le ocurre cuál puede ser el motivo, encantado de experimentar lo que sea...

Edited by Prestafan33 (see edit history)
Link to comment
Share on other sites

  • 2 years later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...