ccross Posted June 29, 2016 Share Posted June 29, 2016 Buenas, No sé si se podrá. Necesito mandar a order-confirmation.tpl una variable que recojo en shopingcart.tpl Muchas gracias Link to comment Share on other sites More sharing options...
Gabriel Perez Posted June 29, 2016 Share Posted June 29, 2016 Esto no es "pasar de un tpl a otro". En caso de que no puedas enviarla a order-confirmation de la misma forma que a shopingcart, lo que tendrás que plantearte es como enviarla de shopingcart al servidor, guardarla, y luego enviarla de vuelta a order-confirmation. 1 Link to comment Share on other sites More sharing options...
ccross Posted June 29, 2016 Author Share Posted June 29, 2016 Lo que necesito hacer realmente es guardar dos variables , variableUno= id_carrito y variableDos=variable_url en shopping-cart.tpl , después necesito comprobar en order-confirmation.tpl, que el id_carrito es igual al de shopping-cart.tpl y saber si existe algo en la variableDos. Por eso se me vino a la cabeza, buscar la forma de mandar esas variables . Pero estoy en blanco Link to comment Share on other sites More sharing options...
Gabriel Perez Posted June 30, 2016 Share Posted June 30, 2016 (edited) El id del carrito puedes obtenerlo siempre desde el controlador y enviarlo al tpl. Context::getContext()->cart->id Desde Shoping cart hasta order confirmation pasan demasiadas cosas como para que envíes algo de una a otra. Como ya te he dicho, debes enviar esa variable a algún controlador o modulo, y luego recuperarla en order confirmation. Edited June 30, 2016 by Gabriel Perez (see edit history) 1 Link to comment Share on other sites More sharing options...
ccross Posted June 30, 2016 Author Share Posted June 30, 2016 (edited) Estoy intentando lo que me dices. Se me ocurre por ejemplo en el controlador de cartControler.php, recoger el id de carrito y la variable pasada por url y mandarla al tpl orderConfirmation.tpl, pero no se como hacerlo, donde tendría que hacerlo?. En el initContent() veo que manda la información de controlador al shopping_cart.tpl pero como podría mandarlo a otro tpl, podrías darme alguna idea , perdona soy muy nuevo en prestashop y a lo mejor estoy delirando un poco . De todos modos muchas gracias por tu ayuda Gabriel Edited June 30, 2016 by ccaicedo (see edit history) Link to comment Share on other sites More sharing options...
Gabriel Perez Posted June 30, 2016 Share Posted June 30, 2016 (edited) Por algún sitio se empieza. Ten en cuenta lo siguiente : practicamente por cada .tpl en prestashop (vista) hay un controller.php (controlador). Esto significa que tienes un controlador para el carrito (de echo varios : CartController y OrderOpcController) y otro controlador para la confirmacion del pedido ( OrderConfirmationController). Lo unico que tienes que hacer es, ir al controlador adecuado, recoger la variable que necesitas y enviarla al tpl $this->context->smarty->assign('tu_variable', $valor_tu_variable); Donde debes hacer esto? Muy sencillo, simplemente busca donde se llama al tpl : $this->setTemplate(_PS_THEME_DIR_.'order-confirmation.tpl'); OJO : puede que la ruta desde la que se llama al tpl varie en función del controlador o la versión de prestashop. Edited June 30, 2016 by Gabriel Perez (see edit history) 1 Link to comment Share on other sites More sharing options...
ccross Posted July 1, 2016 Author Share Posted July 1, 2016 Gracias por tu ayuda Gabriel. estoy intentando lo que me dices, pero no logro que funcione. Seguramente estoy haciendo algo mal. He ido al orderOpcController recojo las variables pero no logro que desde este controlador las mande al orderconfirmation.tpl. Debo hacer una función nueva para mandar estas variables a otro TPL ? o desde una función que ya esta creada. También se me viene a la cabeza una pregunta. Se puede mandar a un mismo TPL, información de varios controladores. Creo que voy a optar por crear una tabla CPA en la base de datos, que tenga dos campos id_carrito y ExisteCPA (esta variable puede existir o no. La recojo por url). Cuando un cliente este en la página de shopingcart.tpl recogerá las dos variables y las insertara en la tabla CPA. Cuando llegue el cliente a orderConfirmation hara una consulta a la tabla CPA y comparara el id_carrito del orderconfirmation con el que hay en la tabla y comprobara también que hay algún valor en el campo ExisteCPA. Lo malo de esto es que por cada cliente que llegue a la página de shopingcart.tpl se generara un registro en esta tabla, esto no es muy funcional. Y te preguntaras para que todo esto jejeje. Bueno resulta tenemos contratado una empresa donde nos anuncia por banner y cuando alguien hace click desde estos banners la redirecciona a nuestro pagina. La forma de saber que vendemos a través de ellos es con una variable que aparece en la url y siempre se mantiene hasta el final de la compra. Pero hemos encontrado un fallo cuando pagan con PayPal. El cliente va a la página de PayPal paga y vuelve, Pero cuando vuelve ha perdido la variable en la url que nos dice que vienen de los banner, y no podemos saber que hemos vendido gracias a ellos. Bueno va a seguir intentando cosas. Cuando vea la luz lo publicaré, por si a alguien le sucede Gracias nuevamente por tu ayuda Gabriel. Un saludo. Link to comment Share on other sites More sharing options...
ccross Posted July 8, 2016 Author Share Posted July 8, 2016 (edited) Lo he solucionado. He creado un modulo, que cuando llega a la home desde la empresa de banners, cree una cookie y almacene la variable, luego cuando se loguea crea otra cookie con el id de usuario, finalmente cuando vuelve de paypal compara el id del usuario con el almacenado en la cookie y ve si hemos vendido gracias a la empresa de banners. Dejo el código por si a alguien le interesa o da una opinión para mejorarlo . Gracias por tu ayuda Gabriel. public function hookDisplayHome($params) { $click = Tools::getValue('utm_medium'); if (isset($click) && $click=='ClickW'){ $this->context->cookie->__set('clickW', 'si'); } else{ $this->context->cookie->__set('clickW', 'no'); }; return $this->context->cookie->clickW; /*}*/ } public function hookActionValidateOrder($params) { $user = $this->context->cookie->id_customer; $this->context->cookie->__set('user', $user); return $user; } public function hookOrderConfirmation() { $user = $this->context->cookie->id_customer; $userclick = $this->context->cookie->user; $click = $this->context->cookie->clickW; if($user==$userclick && $click=='si'){ $this->context->smarty->assign('clickW' ,true); } } Edited July 8, 2016 by ccross (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts