xabikip Posted April 7, 2015 Share Posted April 7, 2015 Buenas, Si entramos como usuario no loqueado a prestashop y añadimos productos al carrito y cerramos el navegador veo que guarda la información del carrito en alguna parte, porque si abro de nuevo el navegador me sigue apareciendo el carrito con los productos. Me imagino que esto lo hará con la información de los cookies. ¿Sabéis donde guarda esta imformacion? o como hace para cargarme otra vez mi carrito? Gracias, Link to comment Share on other sites More sharing options...
jgamio Posted April 7, 2015 Share Posted April 7, 2015 Efectivamente el carrito registra los datos en las cookies pera tambien en la base de datos El busca en las cookies en numero de identificación y luego complementa con los datos de la base de datos creo que ps_cart y en ps_cart_products estan los productos y las cantidades. Ahora no entiendo que es lo que desea realizar para poder ayudarte 1 Link to comment Share on other sites More sharing options...
xabikip Posted April 7, 2015 Author Share Posted April 7, 2015 Lo que necesito es saber como hace para cargar mi carrito cuando estoy como invitado. En ps_cart veo que guarda la id_guest y en ps_guest puedo ver los datos que tiene para esa id_guest, pero no veo como sabe que id_guest soy. Me dices que en la cookie busca un numero de identificación. ¿Como relaciona ese numero con un carrito o un guest? No se si me explico. Link to comment Share on other sites More sharing options...
jgamio Posted April 7, 2015 Share Posted April 7, 2015 Sigo sin entender que es lo que desea hacer, por ejemplo si quieres cargar la información de un carrito por ejemplo usas $cart = new Cart($this->context->cookie->id_cart); donde $this->context->cookie->id_cart lee el id del cart desde la cookies y ya el objeto $cart tiene toda la información del carrito 1 Link to comment Share on other sites More sharing options...
xabikip Posted April 7, 2015 Author Share Posted April 7, 2015 Exactamente lo que necesito es añadir productos al carro como invitado pero desde un código que esta fuera de prestashop. He conseguido añadir un producto al carro pero lo que no consigo es que si cierra el navegador y vuelve a abrir, poder cargarle su carro. No se como hacer esto. ¿En la base de datos guarda en algún lugar el valor de la cookie para relacionar con el id_cart? Como el código esta fuera de prestashop no puedo hacer $this->context, y lo que tengo que hacer es $context = Context::getContext(); y después si podría hacer $cart = new Cart($context->cookie->id_cart); pero el tema es que en $context->cookie no tengo el id_cart. Si quieres ver el código que estoy haciendo puede ver aquí: https://github.com/xabikip/prestashopBridge/blob/master/PrestashopBridge.php#L160 No se si te aclaro algo, jeje......pero agradecería mucho tu ayuda. Link to comment Share on other sites More sharing options...
jgamio Posted April 7, 2015 Share Posted April 7, 2015 Ok no he visto el codigo porque voy saliendo pero te cuento si ya lograste agregar el carrito y el producto ya casi estas listo tienes que asignar al context el id del cart que acabas de crear $this->context->cookie->id_cart = (int)($cart->id); y luego con un $cart->update(); estarias listo Prestashop se encarga del trabajo no tienes que registrar cookies ni tocar la base de datos Link to comment Share on other sites More sharing options...
xabikip Posted April 7, 2015 Author Share Posted April 7, 2015 El tema es que la primera vez que añado un producto creo un invitado: $guest = new \Guest(); luego creo un carrito en el contexto: $ctx = \Context::getContext(); $ctx->cart = new \Cart(); Le añado el invitado al carro del contexto $ctx->cart->id_guest = (int)($guest->id); y finalmente añado el carro en la cookie del contexto $ctx->cookie->id_cart = (int)$ctx->cart->id; Con el metodo updateQty, modifico los items del carrito: $cart->updateQty($quantity, $idProduct); Hasta aqui todo bien, me funciona. El tema es que si no es el primer producto que quiero añadir, no tendría que crear un nuevo Guest, ni un nuevo Cart, si no recuperar los creados anteriormente. Y esto es lo que no se como hacerlo. No se como hacer si el usuario abandona el carrito poder mostrarle el ultimo carrito que abandono. No se donde guarda PrestaShop la información que relaciona el cookie del invitado con su carrito. Me explico mejor ahora? Link to comment Share on other sites More sharing options...
jgamio Posted April 7, 2015 Share Posted April 7, 2015 Haber primero hay que tener claro lo que quieres Estas creando un guest cada vez que trabajas con el cart así que nunca vas a recuperar nada, tienes que tener otro tipo de control Como estas accediendo externamente puedes registrar otros datos en tu base de datos con una tabla o usar la misma que tienes en cart es decir no hay (que yo sepa) una función que regrese el carrito por user pero es sencillo de implementar o simplemente haces una consulta de tu guess en cart y con el id crear el cart y te trae todo de la base de datos. o Puedes chequear que exista un cart , si el cart ya existe en el contexto lo cargas y actualizas sin crear un nuevo guess ni un nuevo cart Link to comment Share on other sites More sharing options...
xabikip Posted April 7, 2015 Author Share Posted April 7, 2015 Si ya se que estoy creando un guest y un carrito cada vez, pero el problema esta en que no se como chequear si existe un carro. Otro problema que tengo es que o se como saber que guest es el que entra. En si en la tabla ps_cart hay un campo que es id_customer y otro que es id_guest, asi que si esta el dato de cada carrito a quien pertenece, lo que no se es cuando entro que id_guest soy. Link to comment Share on other sites More sharing options...
jgamio Posted April 7, 2015 Share Posted April 7, 2015 Ok facil if ($this->context->cookie->id_cart) { $cart = new Cart($this->context->cookie->id_cart); } SI exite un cart activo lo carga luego con if (!isset($cart) OR !$cart->id) Chequeas que efectivamente levanto sino creas uno nuevo Esto solo te verifica que carga el ultimo carrito que esta en esa computadora Ahora si quieres hacer un chequeo de user lo que debes hacer es crear un tabla donde recolectes un codigo del link externo y lo relacionas con el guest del cart asi cuando entras con tu codigo externo localizas el guest del carrito y con el id levantas el carrito correspondiente Link to comment Share on other sites More sharing options...
xabikip Posted April 8, 2015 Author Share Posted April 8, 2015 Ok, pero dentro de context->cookie nunca tengo id_cart. Yo creo que el problema puede estar en que como estoy fuera del código de PrestaShop no puedo hacer $this->context, si no que tengo que hacer $context = Context::getContext(); y después en $context->cookie no se porque nunca tengo id_cart. ¿Sabes porque? o ¿que es lo que estoy haciendo mal? Link to comment Share on other sites More sharing options...
deltahel Posted September 21, 2016 Share Posted September 21, 2016 Hola! Revivo este hilo para preguntar los siguiente: Cuando estoy logueado como cliente, me aparecen los productos en el carrito que tengo cargados. Sí por algún motivo cargo otros, estando sin loguear e ingreso como cliente me borra los que ya tenía y me deja únicamente los nuevos. La pregunta es. ¿Como hago para que los anteriores se mantengan y se agreguen los nuevos al carrito? Gracias por sus posibles respuestas. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now