Jump to content

Creando un módulo para un FollowUp al estilo Amazon


gr_fenix

Recommended Posts

Buenos días,

 

Me presento con el nombre de GR_Fenix.

 

Partiendo del módulo de Prestashop de "Retome contacto con sus clientes", quiero hacer una modificación para que muestre de la siguiente forma el correo de los carritos abandonados (Opción 1).

 

Un ejemplo de lo que quiero hacer:

Array.jpg

El módulo de PS solo muestra un texto así:

 

Hola {firstname} {lastname},   Su cesta de {shop_name}   Nos dimos cuenta de que durante su última visita en {shop_name}, que no ha validado la orden que había comenzado.

Su carrito ha sido guardado, puede reanudar su solicitud por visitar nuestra tienda:

{shop_url}

Como excepción, le ofrecemos un descuento del {amount}% de descuento en su próximo pedido! Esta oferta es válida para {days} días, así que no pierdas un instante!   Aquí está tu cupón: {voucher_num}

Introduzca este código en tu carrito de compras para obtener el descuento.

 

 

Para llegar a este fin, he modificado el modulo original de PS. El archivo followup.php. He modificado la llamada a la base de datos para obtener la ID del Producto que están en la cesta y el nombre:

$sql = '
			SELECT c.id_cart, c.id_lang, cu.id_customer, cu.firstname, cu.lastname, cu.email, cp.id_product, pl.name
			FROM '._DB_PREFIX_.'cart c
			LEFT JOIN '._DB_PREFIX_.'orders o ON (o.id_cart = c.id_cart)
			LEFT JOIN '._DB_PREFIX_.'customer cu ON (cu.id_customer = c.id_customer)
			LEFT JOIN '._DB_PREFIX_.'cart_product cp ON (cp.id_cart = c.id_cart)
			LEFT JOIN '._DB_PREFIX_.'product_lang pl ON (pl.id_product = cp.id_product)
			WHERE DATE_SUB(CURDATE(),INTERVAL 7 DAY) <= c.date_add AND cu.id_customer IS NOT NULL AND o.id_order IS NULL AND pl.id_lang = 3';

		if (!empty($emailLogs))
			$sql .= ' AND c.id_cart NOT IN ('.join(',', $emailLogs).')';

		$emails = Db::getInstance()->ExecuteS($sql);
		
		if ($count OR !sizeof($emails))
			return sizeof($emails);
		
		$conf = Configuration::getMultiple(array('PS_FOLLOW_UP_AMOUNT_1', 'PS_FOLLOW_UP_DAYS_1'));
		foreach ($emails AS $email)
		{
				$voucher = $this->createDiscount(1, (float)($conf['PS_FOLLOW_UP_AMOUNT_1']), (int)($email['id_customer']), strftime('%Y-%m-%d', strtotime('+'.(int)($conf['PS_FOLLOW_UP_DAYS_1']).' day')), $this->l('Discount for your cancelled cart'));				
				if ($voucher !== false)
				{
					$templateVars = array('{email}' => $email['email'], '{lastname}' => $email['lastname'], '{firstname}' => $email['firstname'], '{id_product}' => $email['id_product'],'{name}' => $email['name'], '{amount}' => $conf['PS_FOLLOW_UP_AMOUNT_1'], '{days}' => $conf['PS_FOLLOW_UP_DAYS_1'], '{voucher_num}' => $voucher->name);
					$result = Mail::Send((int)($email['id_lang']), 'followup_1', Mail::l('Your cart and your discount', $email['id_lang']), $templateVars, $email['email'], $email['id_product'], $email['name'], $email['firstname'].' '.$email['lastname'],  NULL, NULL, dirname(__FILE__).'/mails/');
					$this->logEmail(1, (int)($voucher->id), (int)($email['id_customer']), (int)($email['id_cart']));
				}
		}

El problema es que no hay un bucle para mostrar más de un producto. La pregunta es:

 

¿Cómo puedo hacer un For Each para mostrar cada uno de los productos que el cliente tiene en el carrito?

 

Gracias

Link to comment
Share on other sites

  • 4 months later...

Hola Rafael,

 

Conseguí que mostrara el producto, nombre, cantidad etc que tenía el cliente en el carrito, pero como comenté en rojo, solo me muestra 1. No hay recorrido "for each" de cada artículo.

 

Podríamos avanzar en conjunto con este tema.

 

Saludos

Link to comment
Share on other sites

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