Jump to content

Cargar producto al carrito y redirigir desde php


raistlinsk

Recommended Posts

Buenas,

 

La verdad es que llevo dandole vueltas a esto un par de días y creo que me voy a volver loco. Necesito agregar un producto al carrito desde php (No me vale enviar un formulario) y después redirigir al carrito donde está ese producto.

 

Primero ejecuto lo siguiente:

if (!isset($this->context->cart->id) OR !$this->context->cart->id) {
            $this->context->cart->add();
        } else {
            $cartProducts = $this->context->cart->getProducts();
            foreach ($cartProducts as $cartProduct) {
                $this->context->cart->deleteProduct($cartProduct['id_product']);
            }
        }

Si no encuentro carrito creo uno, y si lo encuentra, elimino todos los productos para que luego al cargar el mio solo aparezca ese.

 

Para agregar el producto al carrito, uso el metodo UpdateQty, si ya había algún producto en el carrito, se elimina y aparece. Hasta aquí todo bien, se añade el producto correctamente. El problema está, en que cuando no hay productos en el carrito y lo creo, al redirijo al carrito, este aparece vacio. En cambio, si me voy al backoffice veo que hay un carrito con mi producto, y otro en blanco. 

$this->context->cart->updateQty($quantity, $idproduct, $idattribute);
Tools::redirectLink('order-opc');

No entiendo si estoy haciendo algo mal, en la creación del carrito, en el agregar el producto, o en la redirección.

 

¿Alguien me puede echar una mano?

 

 

Gracias.

 

Link to comment
Share on other sites

Vale, ya he dado con la solución. Una vez creado el carrito, me faltaba asignar el carrito a las cookies:

$this->context->cookie->id_cart = (int)$this->context->cart->id;

 

Quedan todo así:

        if (!isset($this->context->cart->id) OR !$this->context->cart->id) {
            $this->context->cart->add();
            $this->context->cookie->id_cart = (int)$this->context->cart->id;
        } else {
            $cartProducts = $this->context->cart->getProducts();
            foreach ($cartProducts as $cartProduct) {
                $this->context->cart->deleteProduct($cartProduct['id_product']);
            }
        }

$this->context->cart->updateQty($quantity, $idproduct, $idattribute);
        Tools::redirectLink('order-opc');

 

Espero que a alguien le sirva.

Link to comment
Share on other sites

Vale, ya he dado con la solución. Una vez creado el carrito, me faltaba asignar el carrito a las cookies:

 

$this->context->cookie->id_cart = (int)$this->context->cart->id;

 

Quedan todo así:

        if (!isset($this->context->cart->id) OR !$this->context->cart->id) {
            $this->context->cart->add();
            $this->context->cookie->id_cart = (int)$this->context->cart->id;
        } else {
            $cartProducts = $this->context->cart->getProducts();
            foreach ($cartProducts as $cartProduct) {
                $this->context->cart->deleteProduct($cartProduct['id_product']);
            }
        }

$this->context->cart->updateQty($quantity, $idproduct, $idattribute);
        Tools::redirectLink('order-opc');

 

Espero que a alguien le sirva.

 

Por simple curiosidad ¿Puedes compartir el codigo completo de la pagina "externa"? 

 

¿Esa pagina es un listado de productos que se añaden al carrito?

 

PD: Ya se que has comentado que has solucionado el tema, pero me ha entrado curiosidad.

 

Por cierto, se te ha olvidado añadir la palabra "Solucionado": http://www.prestashop.com/forums/topic/269515-solucionado-%C2%BFcomo-poner-la-palabra-solucionado-en-el-titulo-del-tema/ al titulo del tema.

Link to comment
Share on other sites

  • nadie locked this topic
Guest
This topic is now closed to further replies.
×
×
  • Create New...