Добавляем нового подписчика сразу в админку, даже не спрашивая разрешения на рассылку 🙂
Как в битриксе добавить нового подписчика через свою форму
Предположим, что на сайте есть ваша форма, и вы не хотите использовать компоненты, которые уже есть в 1С-Битрикс. Форму вы сверстали, остался файл обработчик, при помощи которого пользователь попадет в базу и подпишется на определенную рубрику или даже несколько.
Пропустим тот момент, где нужно написать HTML с формой и передать в ваш обработчик поле с емейлом, и перейдем непосредственно к коду:
<? if (CModule::IncludeModule('subscribe') && !empty($_POST['email'])) { $email = $_POST['email']; $subscribeFields = array( "USER_ID" => ($USER->IsAuthorized()? $USER->GetID():false), "FORMAT" => "html", "EMAIL" => $email, "ACTIVE" => "Y", "CONFIRMED" => "Y", "SEND_CONFIRM" => "N", "RUB_ID" => array(1) ); $subscr = new CSubscription; $ID = $subscr->Add($subscribeFields); if($ID > 0) { CSubscription::Authorize($ID); } } ?>
Небольшой комментарий ко всему происходящему:
если вы передали формой email пользователя, методом POST, значения которого лежит в $_POST[’email’] – и модуль для подписки и рассылки подключен, пытаемся выяснить авторизован ли юзер, чтобы привязать к его ID. В параметрах также указываем тип HTML, активность, то что рассылка сразу подтверждена и письмо с подтверждением не отсылаем:
"CONFIRMED" => "Y", "SEND_CONFIRM" => "N",
а также перечисляем ID рубрик, на которые подписываем пользователя, обязательно в массиве:
"RUB_ID" => array(1)
Если у вас возникают ошибку не забывайте прописывать пролог. И не забываем про область видимости для USER – global:
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");?> <? global $USER;
В целом работа с подпиской через битрикс, как по мне, не слишком удобная штука, а местами очень даже забагованная. Но если у вас всё получается хорошо, значит у меня был просто неудачный опыт 🙂
А какими сервисами пользуетесь вы? mailchimp, unisender? Расскажите в комментариях как вы решали подобную задачу на своем проекте 🙂