Делал в корзине подтверждение подписки на новости для текущего пользователя.
Шаблон
В шаблон оформления заказа добавлем чекбокс с ajax обработчиком.
Статус чекбокса устанавливается путем проверки почтового адреса текущего пользователя. Если в массиве адресов подписки есть адрес текущего пользователя, чекбокс отображается checked.
CModule::IncludeModule('subscribe');
//активные и подтвержденные адреса, подписанные на рубрики
$subscr = CSubscription::GetList(
array(),
array()
);
while(($subscr_arr = $subscr->Fetch())) {
$aEmail = $subscr_arr["EMAIL"];
if($aEmail == $USER->GetEmail()) {
$subscribe_array = $subscr_arr;
break;
}
}
// чекбокс со статусом в зависимости от того подписан или нет
if($aEmail == $USER->GetEmail()) {
?><p class="subscribe"><input id="subscribe" type="checkbox" name="subscribe" value="2" checked=checked>Рассылка</p><?
} else {
?><p class="subscribe"><input id="subscribe" type="checkbox" name="subscribe" value="1">Подписаться на рассылку</p><?
}
?>
<script type="text/javascript">
$(document).ready(function(){
$('input#subscribe').click(function(){
var status = $('input#subscribe').val();
var subid = '<?=$subscribe_array['ID']?>';
$.ajax({
type: "POST",
data: {s:status,subid:subid},
url: '/test.php', // обработчик
success: function(data){
alert(data);
}
});
});
});
</script>
Обработчик
Файл subscribe.php.
require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_before.php");
// require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
// $APPLICATION->SetTitle("test");
CModule::IncludeModule('subscribe');
global $USER;
if($_POST['s'] !== '') {
############ НЕ ПОДПИСАН ли УЖЕ? ############
$subscr = CSubscription::GetList(
array(),
array()
);
while(($subscr_arr = $subscr->Fetch()))
$aEmail[] = $subscr_arr["EMAIL"];
if(!in_array($USER->GetEmail(), $aEmail) && $_POST['s'] == 1) {
# пидпысаты нахiй
// запрос всех рубрик
$rub = CRubric::GetList(
array("LID"=>"ASC","SORT"=>"ASC","NAME"=>"ASC"),
array("ACTIVE"=>"Y", "LID"=>LANG)
);
$arRubIDS = array();
while ($arRub = $rub->Fetch()){
$arRubIDS[] = $arRub['ID'];
}
// формируем массив с полями для создания подписки
$arFields = Array(
"USER_ID" => $USER->GetID(),
"FORMAT" => "html",
"EMAIL" => $USER->GetEmail(),
"ACTIVE" => "Y",
"RUB_ID" => $arRubIDS,
"SEND_CONFIRM" => 'N'
);
$subscr = new CSubscription;
// создаем подписку
$ID = $subscr->Add($arFields);
if ($ID > 0){
$arResult['status'] = 'ok';
} else {
$arResult['status'] = 'error';
$arResult['msg'] = str_replace("<br>","",$subscr->LAST_ERROR);
}
$subscr->Update($ID, array("ACTIVE"=>"Y", "CONFIRM"=>"Y"));
echo "вы подписались на рассылку";
} elseif(in_array($USER->GetEmail(), $aEmail) && $_POST['s'] == 2) {
# видпысаты нахiй
if (($res = CSubscription::Delete($_POST['subid'])) && $res->AffectedRowsCount() < 1 || $res == false){
echo "Error deleting subscription.";
} else {
echo "Subscription deleted.";
}
}
} else {
echo "error";
}



