Отправляем купон при подписке на рассылку Битрикс
Очень хорошим стимулом для подписки на рассылку вашего интернет-магазина является выдача купона со скидкой на товар. Сейчас мы реализуем функционал выдачи купона пользователю, если тот подписался на рассылку.
В примере мы создаём купон для правил работы с корзиной. Кроме того, пример будет работать только в случае, если в компоненте не выставлен параметр "Запрашивать подтверждение подписки".
Реализовывать отправку купона при подписке на рассылку, мы будем кастомизируя стандартный компонент подписки bitrix:sender.subscribe.
Для начала полностью копируем этот компонент в своё пространство имён. Затем открываем файл component.php, находим условие if($arParams["CONFIRMATION"]) примерно на 102 строке и в else для этого условия вставляем такой код:
$sendCoupon = true; if(count($mailingIdList) > 0) { $arExistedSubscription = array(); $subscriptionDb = \Bitrix\Sender\MailingSubscriptionTable::getSubscriptionList(array( 'select' => array('EXISTED_MAILING_ID' => 'MAILING.ID'), 'filter' => array('=CONTACT.EMAIL' => strtolower($_POST["SENDER_SUBSCRIBE_EMAIL"]), '!MAILING.ID' => null), )); while(($subscription = $subscriptionDb->fetch())) { $arExistedSubscription[] = $subscription['EXISTED_MAILING_ID']; } // send if it have new subscriptions only if(count(array_diff($mailingIdList, $arExistedSubscription)) <= 0) $sendCoupon = false; } else { // do not send if no selected mailings and subscriber existed $contactDb = \Bitrix\Sender\ContactTable::getList(array('filter' => array('=EMAIL' => strtolower($_POST["SENDER_SUBSCRIBE_EMAIL"])))); if($contact = $contactDb->fetch()) $sendCoupon = false; } \Bitrix\Sender\Subscription::add($_POST["SENDER_SUBSCRIBE_EMAIL"], $mailingIdList, SITE_ID); if($sendCoupon) { if(\Bitrix\Main\Loader::includeModule('sale')) { $COUPON = \Bitrix\Sale\Internals\DiscountCouponTable::generateCoupon(true); //генерируем купон $fields = array( "DISCOUNT_ID" => "3", //ID правила работы с корзиной "ACTIVE" => "Y", "TYPE" => \Bitrix\Sale\Internals\DiscountCouponTable::TYPE_ONE_ORDER, //купон на один заказ "COUPON" => $COUPON, "DATE_APPLY" => false ); $result = \Bitrix\Sale\Internals\DiscountCouponTable::add($fields); if($result->isSuccess()) { $arEventFields = array( "EMAIL" => $_POST["SENDER_SUBSCRIBE_EMAIL"], "COUPON" => $COUPON ); CEvent::Send("SEND_COUPON", "s1", $arEventFields); } } } $APPLICATION->set_cookie("SENDER_SUBSCR_EMAIL", $_POST["SENDER_SUBSCRIBE_EMAIL"], $cookieLifeTime); $arResult['MESSAGE'] = array('TYPE' => 'NOTE', 'CODE' => 'message_success'); $subscr_EMAIL = $_POST["SENDER_SUBSCRIBE_EMAIL"]; unset($_SESSION['SENDER_SUBSCRIBE_LIST']);
И теперь нам остаётся только создать тип почтового события SEND_COUPON и шаблон письма к нему. В шаблоне для вывода купона используйте переменную #COUPON#, а для адреса получателя - #EMAIL#.