Jump to content

Pasar una variable de un tpl a otro


ccross

Recommended Posts

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.

  • Like 1
Link to comment
Share on other sites

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

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 by Gabriel Perez (see edit history)
  • Like 1
Link to comment
Share on other sites

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 by ccaicedo (see edit history)
Link to comment
Share on other sites

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 by Gabriel Perez (see edit history)
  • Like 1
Link to comment
Share on other sites

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

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 by ccross (see edit history)
Link to comment
Share on other sites

×
×
  • Create New...