jujutte24 Posted October 28, 2013 Share Posted October 28, 2013 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 More sharing options...
ckarone Posted October 31, 2013 Share Posted October 31, 2013 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now