Универсальный код для подписки и отписки пользователя на конкретную рубрику.
Как в битриксе подписать пользователя на рубрику
Для реализации данной задачи нам поможет bitrix api. От нас требуется передать через форму $_POST[“SUBSCRIBE”]
сделать это можно например так:
<input name="SUBSCRIBE" value="Y" type="hidden">
Именно этот “инпут” нам необходим в нашей форме, если вы используете нестандартный компонент.
if(CModule::IncludeModule("subscribe")){ if ($_POST["SUBSCRIBE"] == "Y") { $arFields = Array( "USER_ID" => $USER->GetID(), "FORMAT" => "html", "EMAIL" => $USER->GetEmail(), "ACTIVE" => "Y", "RUB_ID" => array() ); $subscr = new CSubscription; $ID = $subscr->Add($arFields); if($ID>0) { CSubscription::Authorize($ID); } } else { $subscription = CSubscription::GetByEmail($USER->GetEmail()); if($subscription->ExtractFields("str_")) { $ID = (integer)$str_ID; } if ($ID >0) { $res = CSubscription::Delete($ID); } } }
На что стоит обратить внимание? Давайте глянем для начала какие есть поля:
- RUB_ID – массив идентификаторов рассылок, на которые подписывается адрес;
- SEND_CONFIRM – отправлять ли письмо с кодом подтверждения подписчику (Y/N).
- ALL_SITES – отписать подписчика от рассылок всех сайтов или только от заданного SITE_ID (Y/N).
- USER_ID – необязательный. Идентификатор зарегистрированного пользователя.
и список основных полей:
Название поля | Описание | Тип | Обяз. |
---|---|---|---|
ID | Идентификатор подписки. | int | Да. |
DATE_INSERT | Дата добавления записи. | datetime | |
DATE_UPDATE | Дата модификации записи. | datetime | |
USER_ID | Идентификатор пользователя, которому принадлежит подписка. Если NULL, то подписка анонимна. | int | |
ACTIVE | Признак активности подписки (Y/N). Если подписка не активна, то рассылка на этот адрес не производится. | char(1) | |
Email подписки (уникальный). | string(255) | Да. | |
FORMAT | Предпочтительный формат выпуска (text/html). | string(4) | |
CONFIRM_CODE | Код подтверждения подписки (пароль). | string(8) | |
CONFIRMED | Признак подтверждения подписки (Y/N). | char(1) | |
DATE_CONFIRM | Дата отправки кода подтверждения подписки. | datetime |
Оригинал таблицы по этой ссылке:
https://dev.1c-bitrix.ru/api_help/subscribe/classes/csubscriptiongeneral/csubscriptiongeneralfields.php
Из важных моментов:
1. убедитесь, что вы правильно передали ID пользователя
2. формат подписки может быть как чистый текст так и HTML
3. ID рубрики, укажите их чтобы подписать пользователя на определенную рубрику
4. SEND_CONFIRM – отправлять ли на емейл пользователя оповещение о подтверждении подписки. Если нет – указываем в параметрах “CONFIRMED” => “Y” и пользователь будет сразу подписан, так сказать, без своего согласия 🙂
Если вам функционал отписки не нужен, убираем часть кода и у нас остается:
if(CModule::IncludeModule("subscribe")){ if ($_POST["SUBSCRIBE"] == "Y") { $arFields = Array( "USER_ID" => $USER->GetID(), "FORMAT" => "html", "EMAIL" => $USER->GetEmail(), "ACTIVE" => "Y", "RUB_ID" => array(), "CONFIRMED" => "Y" ); $subscr = new CSubscription; $ID = $subscr->Add($arFields); if($ID>0) { CSubscription::Authorize($ID); } } }