Итак, возникла необходимость добавить функционал подписки покупателя на рассылку на странице оформления заказа. Как это реализовать?
Вот что необходимо сделать:
1. Добавить свойство заказа в настройках магазина
2. Добавить обработчик события добавления заказа
3. В обработчике подписать покупателя на рассылку
Добавляем свойство заказа
Для чего это вообще нужно? Это нужно чтобы пользователь мог проставить(снять) галку в форме оформления заказа, выразив желание получать новости и акции от нас.
Переходим в меню Магазин -> Настройки -> Свойства заказа -> Список свойств. Добавляем новое свойство c кодом SUBSCRIBE.
Если шаблон оформления заказа не кастомизировался, то больше никаких действий для вывода чекбокса в форме оформления заказа предпринимать не нужно.
Добавляем обработчик события создания нового заказа
Находим файл /bitrix/php_interface/init.php, либо /local/php_interface/init.php. Если же файла init.php нет то создаем его по одному из указанных пути и в нем пишем следующий код:
use Bitrix\Main;
Main\EventManager::getInstance()->addEventHandler(
'sale',
'OnSaleOrderSaved',
'OnOrderAddSubscribe'
);
Таким образом мы добавили через менеджер событий обработчик события сохранения заказа OnSaleOrderSaved. Теперь добавим саму функцию обработчика OnOrderAddSubscribe.
Подписываем пользователя на рассылку
function OnOrderAddUpdateServFields(Main\Event $event)
{
$order = $event->getParameter("ENTITY");
$isNew = $event->getParameter("IS_NEW"); //получаем флаг того, что заказ новый
if ($isNew) //только для новых
{
//подписка на рассылку
\Bitrix\Main\Loader::IncludeModule("subscribe");
$orderSubscribePropertyId = 53; //ID созданного свойства заказа с кодом SUBSCRIBE
$orderEmailPropertyId = 2; //ID свойства заказа в котором хранится E-mail адрес покупателя
//информация о подписке при оформлении заказа
$propertyCollection = $order->getPropertyCollection();
$subscribe_prop = $propertyCollection->getItemByOrderPropertyId($orderSubscribePropertyId);
$email_prop = $propertyCollection->getItemByOrderPropertyId($orderEmailPropertyId);
$subscribe_val = $subscribe_prop->getValue();
$email_val = $email_prop->getValue();
if($subscribe_val == 'Y'){ //проверяем, что галка проставлена
$RUB_ID = array(6); //массив ID рубрик на которые будет подписан покупатель
\Bitrix\Sender\Subscription::subscribe(array('EMAIL'=>$email_val, 'SUBSCRIBE_LIST'=>$RUB_ID)); //оформляем подписку
}
}
}