Делал в корзине подтверждение подписки на новости для текущего пользователя.
Шаблон
В шаблон оформления заказа добавлем чекбокс с 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"; }