vasilyev
@vasilyev
php, 1c-bitrix

Как отслеживать подтверждение подписки пользователя в 1С-Битрикс?

Всем привет!

Возникла острая необходимость отследить тот момент, когда пользователь подтвердил свое желание получать рассылку (после этого планируется начислить ему баллы на оплату покупки). Я привычно пошел на http://dev.1c-bitrix.ru/ но для подписок я увидел только 1 событие: BeforePostingSendMail. Я, конечно, могу при каждой отсылке письма смотреть, были ли уже начислены этому пользователю баллы (по транзакциям, как минимум, если это возможно, еще не смотрел) и если нет, то начислять. Но неужели нет более нормального способа? Если кто-то сталкивался, расскажите, пожалуйста!
  • Вопрос задан
  • 5268 просмотров
Решения вопроса 1
vasilyev
@vasilyev Автор вопроса
php, 1c-bitrix
Сделал дурацким путем, но это лучше (для меня), чем триггеры БД.

1. Делаем форк компонента subscribe.edit.
2. Внутри component.php ищем блок:
//confirmation code from letter or confirmation form
if($_REQUEST["CONFIRM_CODE"] <> "" && $ID > 0 && empty($_REQUEST["action"]))
{
	if($arSubscription["CONFIRMED"] <> "Y" && count($arWarning)==0)
	{
		//subscribtion confirmation
		if($obSubscription->Update($ID, array("CONFIRM_CODE"=>$_REQUEST["CONFIRM_CODE"])))
			$arSubscription["CONFIRMED"] = "Y";
		if($obSubscription->LAST_ERROR<>"")
			$arWarning[] = $obSubscription->LAST_ERROR;
		$iMsg = $obSubscription->LAST_MESSAGE;
        //тут делаем то, что нам нужно.
	}
}

Естественно, это не будет работать, если подписку подтвердили не через компонент (например, в админке), но лично я понял, что мне оно и не нужно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@MHumster
Увы, с Битриксом не всегда все очевидно. Я лично реализовывал механизм подписки/отписки вручную через API и соотв. получал контроль над всеми событиями.
Иногда удобно вынести функционал в БД - поставить триггер на нужную таблицу и ловить события там.
Вообще весь Битрикс по сути read-write с БД, подлезть можно куда угодно если не загоняться на компоненты и штатный API.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы