Jump to content

Recommended Posts

Hola! Necesito agregar un botón en la primer instancia del carrito, que envíe un email con los valores de los productos agregados al momento... Es decir, lo que se observa en pantalla. Nombre del producto agregado al carrito, combinación, precio unitario, cantidad y precio total.

Sólo he logrado traer el valor total del carrito con la variable $this->context->cart->getOrderTotal()

Alguien conoce cómo puedo traer el detalle de los productos añadidos al carrito? Reitero, es en la primer instancia del carrito. Es decir, sin haber continuado el proceso de compra.

 

Desde ya muchas gracias!!!

Link to comment
Share on other sites

Entiendo que lo quieres hacer desde un modulo, lo mejor es que revises por ejemplo el modulo blockcart, ahi tienes

$products = $params['cart']->getProducts(true);  // Info productos

$shipping_cost = Tools::displayPrice($base_shipping, $currency);
$shipping_cost_float = Tools::convertPrice($base_shipping, $currency);
$wrappingCost = (float)($params['cart']->getOrderTotal($useTax, Cart::ONLY_WRAPPING));
$totalToPay = $params['cart']->getOrderTotal($useTax);  // Info gastos de envio y precios totales
Link to comment
Share on other sites

 

Entiendo que lo quieres hacer desde un modulo, lo mejor es que revises por ejemplo el modulo blockcart, ahi tienes

$products = $params['cart']->getProducts(true);  // Info productos

$shipping_cost = Tools::displayPrice($base_shipping, $currency);
$shipping_cost_float = Tools::convertPrice($base_shipping, $currency);
$wrappingCost = (float)($params['cart']->getOrderTotal($useTax, Cart::ONLY_WRAPPING));
$totalToPay = $params['cart']->getOrderTotal($useTax);  // Info gastos de envio y precios totales

Gracias por tu respuesta ventura!

De todas maneras no lo quiero hacer desde un módulo... Es en la primer instancia normal del carrito. He agregado en el archivo shopping-cart.tpl un botón que enviará datos determinados en el orderController.php. En este archivo he declarado la variable para que llegue el precio total de todo el carrito, pero preciso traer los otros datos como ser Nombre de los productos añadidos al carrito, precio unitario, cantidad de los mismos y precio total. Estos valores se envían luego como email desde un archivo .html 

 

Cómo puedo tomar los datos de esos productos añadidos al carrito? además del precio total que ya lo he logrado

Link to comment
Share on other sites

He intentado con la función $this->context->cart->getSummaryDetails() pero me devuelve página en blanco y no se envía el email.

 
También he probado declarando la variable $summary = $this->context->cart->getSummaryDetails(null, true);
$productos= $summary['products'];
La variable $productos es la que viaja por email. Pero me da un número (7141) que nada tiene que ver con lo ingresado en el carrito...
De qué otra manera puedo colocar esta función para que me traiga los diferentes datos?
Link to comment
Share on other sites

Si quieres a informacion de los productos, la puedes coger por ejemplo del array

$products_cart = $this->context->cart->getProducts();

Con el array multidimensional de 

$cart_summary = $this->context->cart->getSummaryDetails();

accedes a toda la informacion del carrito, productos, datos de envio y facturacion,etc, al ser multidimensional no puedes acceder con la variable que has creado de products

Link to comment
Share on other sites

Perdón por insistir... yo ya he intentado con la sentencia $this->context->cart->getProducts(); pero tampoco llega ninguna información... He probado en otra ocasión con $this->context->cart->getSummaryDetails(null, true); pero tampoco resulta.

No hay nada más que deba colocar?? Para que analices quizás como es mi php... he configurado el envío de la siguiente manera:

 

public function postProcess()
	{
		if (Tools::isSubmit('submitBoton'))
		{
			
			$nombre_c = $this->context->customer->firstname;
			$apellido_c = $this->context->customer->lastname;
			$email_c = $this->context->customer->email;
			$totalpagar = $this->context->cart->getOrderTotal();

			Mail::Send(
	            Configuration::get('PS_LANG_DEFAULT'),
	            'nombre de plantilla email',
	            Mail::l('Encabezado de email'),
	            array(
	                '{firstname}' => $nombre_c,
	                '{lastname}' => $apellido_c,
	                '{email}' => $email_c,
	                '{products}' => $this->context->cart->getProducts(),
	                '{total_paid}' => $totalpagar
	                ),
	            Configuration::get('PS_SHOP_EMAIL'),
	            Configuration::get('PS_SHOP_NAME')
	        );

			return Mail::Send(
				Configuration::get('PS_LANG_DEFAULT'),
				'nombre de plantilla email2',
				Mail::l('Encabezado de email2'),
				array(
					'{firstname}' => $nombre_c,
					'{lastname}' => $apellido_c,
					'{email}' => $email_c),
				$email_c,
				$nombre_c.' '.$apellido_c
			);
		}
		// Update carrier selected on preProccess in order to fix a bug of
		// block cart when it's hooked on leftcolumn
		if ($this->step == 3 && Tools::isSubmit('processCarrier'))
			$this->processCarrier();
	}
Link to comment
Share on other sites

como ya hemos comentado antes

'{products}' => $this->context->cart->getProducts(),

te genera un array con todos los datos del producto, si lo integras asi tal cual no te va a mostrar nada en el correo. Fijate por ejemplo como esta integrado en la classe PaymentModule.php, tienes que crear una lista con las variables que muestra el array product ya que en la plantilla del mail esto no se puede hacer, se hace en un .tpl

$product_list_txt = $this->getEmailTemplateContent('order_conf_product_list.txt', Mail::TYPE_TEXT, $product_var_tpl_list);
						$product_list_html = $this->getEmailTemplateContent('order_conf_product_list.tpl', Mail::TYPE_HTML, $product_var_tpl_list);

No entiendo porque no lo integras en un modulo, seria una mejor practica que mediante un override

Link to comment
Share on other sites

Si, vi también el archivo de PaymentModule.php y esa porción de código que genera el email, pero no funcionó.
Te hago una consulta más por favor, por ejemplo, la información que recoge PaymentModule y envía un email cuando se efectuó la compra, es de los mismos datos que yo preciso... Nombre de los productos, cantidades, precios unitarios y totales... Este archivo actúa en el final del carrito, cuando la compra se confirmó. Existe manera de que utilice esto mismo para la primer instancia del carro como yo deseo? A qué te referis con integrarlo en un módulo? a esta consulta anterior que te realicé?

 

Muchas gracias por tu ayuda!!!

Link to comment
Share on other sites

Por la informacion que das de lo que quieres hacer creo que la mejor opcion es mediante un modulo

Si revisas la funcion del hook ( el del PaymentModule.php)

public function hookActionValidateOrder

del modulo ​mailalerts alli veras como realiza el envio de la informacion del pedido cuando este se realiza. 

Puedes crear un modulo que en vez de a ese  hook vaya al hook:

public function hookActionCartSave

que es el guarda la informacion del carrito

Edited by ventura (see edit history)
Link to comment
Share on other sites

Por la informacion que das de lo que quieres hacer creo que la mejor opcion es mediante un modulo

Si revisas la funcion del hook ( el del PaymentModule.php)

public function hookActionValidateOrder

del modulo ​mailalerts alli veras como realiza el envio de la informacion del pedido cuando este se realiza. 

Puedes crear un modulo que en vez de a ese  hook vaya al hook:

public function hookActionCartSave

que es el guarda la informacion del carrito

 

Disculpa en esta instancia mi falta de conocimiento: la función CartSave ya existe, verdad? No puedo hacer simplemente algún tipo de llamada desde mi archivo OrderController.php a esa función para que me traiga los datos de los productos añadidos al carrito?

He leído los archivos también que me has mencionado (mailalerts.php y PaymentModule.php) pero me confunde cómo poder aplicarlo a mi caso particular. Desconozco mucho sinceramente sobre hooks y crear módulos. O me puedes facilitar cómo buscar esto y lo investigo. Muchas gracias nuevamente!!!

Link to comment
Share on other sites

Si, desde ese hook se recoge la informacion correspondiente al carrito. Si añades en ese hook un Mail::send, te enviara un correo cuando se añada un producto al carrito, por ejemplo y explicado a groso modo. Luego si quieres que te mande el carrito abandonado, por llamarlo de alguna manera, tendrás que utilizar otra logica que puedes tomar por ejemplo del AdminCartController.php.

 

Un saludo.

Link to comment
Share on other sites

  • 3 weeks later...

Si, desde ese hook se recoge la informacion correspondiente al carrito. Si añades en ese hook un Mail::send, te enviara un correo cuando se añada un producto al carrito, por ejemplo y explicado a groso modo. Luego si quieres que te mande el carrito abandonado, por llamarlo de alguna manera, tendrás que utilizar otra logica que puedes tomar por ejemplo del AdminCartController.php.

 

Un saludo.

 

Buenas tardes ventura y nuevamente muchas gracias por tu ayuda. Te quiero consultar por favor si conoces alguna fuente de donde pueda observar cómo crear un módulo con un hook de acción (ActionCartSave), dado que he intentado hacerlo pero toda la información que encuentro en la web es con hooks de posición...

Link to comment
Share on other sites

Seria algo asi como lo indicado aqui con la logica que le quieras aplicar

http://stackoverflow.com/questions/14495653/prestashop-how-to-empty-cart

 

Comprendí como se llaman a los diferentes parámetros que deseo mostrar, estoy investigando cómo realizar un envío a partir de la información de ese hook desde la página de la primer instancia del carrito.

 

Muchas gracias por tu ayuda

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...