Jump to content

Module Relance panier avec produits en miniatures


Recommended Posts

Bonjour à la communauté !

 

J'utilise de façon régulière le module de relance panier.

Mais j'aimerai le personnaliser.

 

En fait, j'aimerai récupérer les produits que le client a mis dans le panier, sur le corps du mail, sous la forme d'une miniature (style produits phares).

 

Ces infos sont connues, car le module sait que le client "x" a mis un produit "P" au panier, mais il ne reprends pas ce produit dans le corps du mail.

 

Si quelqu'un a une idée....?

Peut-être même un bouton pour repartir vers le récap panier directement ?

 

Merci ;)

Link to comment
Share on other sites

Bonjour Jujutte24,

 

J'était à la recherche d'une solution à la même question que toi ce matin et comme je n'ai rien trouvé j'ai fini par le coder moi-même ;) .

 

Ce n'est finalement pas trop compliqué donc voici le code avec en petit bonus, un lien direct vers le panier si le client est toujours connecté à son compte client.

 

Pour le template de l'email vous devez ajouter ceci pour afficher les produits

{product}

et ceci pour le lien vers le panier :

<a title="{shop_name}" href="{shop_url}order.php?id_cart={idcart}">{shop_url}</a>

Voici le code PHP pour la relance des paniers abandonnés dans followup.php, c'est toute la méthode (qui débute à la ligne 273) que vous devez remplacer.

	/* Each cart which wasn't transformed into an order */
	private function cancelledCart($count = false)
	{
		$emailLogs = $this->getLogsEmail(1);
		$sql = '
			SELECT c.id_cart, c.id_lang, cu.id_customer, cu.firstname, cu.lastname, cu.email
			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)
			WHERE DATE_SUB(CURDATE(),INTERVAL 7 DAY) <= c.date_add AND cu.id_customer IS NOT NULL AND o.id_order IS NULL';

		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)
		{
		  //Les produits du panier 
		  $sqlp = 'SELECT c.id_cart, cp.id_product, i.id_image, il.legend  FROM '._DB_PREFIX_.'cart c
		  LEFT JOIN '._DB_PREFIX_.'cart_product cp ON (cp.id_cart = c.id_cart)
		  LEFT JOIN '._DB_PREFIX_.'image i ON (cp.id_product = i.id_product AND i.cover = 1)
		  LEFT JOIN '._DB_PREFIX_.'image_lang il ON (il.id_image = i.id_image)
		  WHERE c.id_cart = '.$email['id_cart'].'';
		  
		 	$emailsproducts = Db::getInstance()->ExecuteS($sqlp);
		  	$prods='';
				foreach ($emailsproducts AS $emailsproduct)
				{
				$prods .='<img src="'.Tools::getShopDomain(true, true).'/'.__PS_BASE_URI__.''.$emailsproduct['id_product'].'-'.$emailsproduct['id_image'].'-medium/'.$emailsproduct['legend'].'.jpg" alt="'.$emailsproduct['legend'].'">';
				}
					
				$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'], '{amount}' => $conf['PS_FOLLOW_UP_AMOUNT_1'], '{days}' => $conf['PS_FOLLOW_UP_DAYS_1'], '{product}' => $prods,'{voucher_num}' => $voucher->name,'{idcart}' => $email['id_cart']);
					$result = Mail::Send((int)($email['id_lang']), 'followup_1', Mail::l('Your cart and your discount', $email['id_lang']), $templateVars, $email['email'], $email['firstname'].' '.$email['lastname'], NULL, NULL, NULL, NULL, dirname(__FILE__).'/mails/');
					$this->logEmail(1, (int)($voucher->id), (int)($email['id_customer']), (int)($email['id_cart']));
				}
		}
	}

C'est testé sur PS 1.4 mais certainement adaptable à PS1.5 

 

Faites des test avant de mettre en prod .

 

Ckarone

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...