2011-04-12 7 views
11

Si tuviera que iniciar sesión en Magento y agregar algunos productos a su cesta y luego abandonar el sitio, estos se guardan para la próxima vez que regrese al sitio.¿Cómo impido que Magento combine la cesta al iniciar sesión?

Esto, sin embargo, causa un problema cuando regresa. Si, a su regreso, agregó un producto a su cesta sin iniciar sesión y luego se conectó al inicio del proceso de compra, su invitado y la cesta guardada se fusionarán. Esto es indeseable

¿Hay alguna manera de hacer que Magento limpie la cesta guardada en el inicio de sesión si su cesta actual tiene artículos en ella?

Gracias de antemano

Respuesta

18

Parece que el código que rige este está en Mage_Checkout_Model_Session, en concreto en el que llama a Mage_Sales_Model_Quote::merge. Esto significa que tienes algunas opciones.

  1. Sobrescribe la clase de sesión y la fuerza para no provocar la fusión.
  2. Reemplace la clase de presupuesto y haga que nunca se combinen los carritos. Puede haber errores secundarios a este enfoque si otras partes del sistema también intentan fusionar los carros.
  3. Enganche al evento que cita llamadas (sales_quote_merge_before) y aproveche esa oportunidad para vaciar uno de los carritos. Tendría que detectar cuándo debería hacerse esto, pero es mucho más limpio que los otros dos.

Avísame si no está claro de alguna manera. ¡Espero que ayude!

Gracias, Joe

+0

Genius! Fui con el n. ° 3 y anoté un módulo de observador para borrar el carro guardado si el usuario está iniciando sesión desde el proceso de compra y hay artículos en el carro no guardado. –

+1

@PhilLavin Estoy interesado en algún código, si no te importa. He estado mirando hacia arriba y hacia abajo y luego un poco alrededor del código, pero todavía no puedo hacerlo bien. – user00265

+2

Éste funciona en la comunidad, pero no en la empresa, en el momento de publicar esto: https://github.com/jacquesbh/jbh_cartmerge – Ashfame

0

gracias José Mastey, su comentario me ha ayudado mucho, he hecho para el evento/observador, he utilizado el evento describias, y luego me quita la cita de la siguiente manera:

public function emptyCartUserNoLogged($observer){ 
    $event = $observer->getEvent(); 

    $quote = $event->getSource(); 

    $quote->setIsActive(false); 

    $quote->delete(); 

} 

Muchas gracias por su ayuda.

+0

Hola. ¿Puede hacer un git o mostrarnos su código brevemente que me puede ayudar en uno de los problemas que estoy enfrentando actualmente? – Chiragit007

+0

sería bueno que pudieras compartir el código completo (mage 1.9.0.1) –

0

He modificado el Quote.php (/ Sales/Model /) en la línea 1344 dentro de la función de fusión de la siguiente.

foreach ($this->getAllItems() as $item) { 
     $this->removeItem($item->getId()); 
    } 
Cuestiones relacionadas