<form class="subscribe_block subscribe" action="#" id="big_subscribe_top_form">
<input type="hidden" name="TYPE" value="subscribe">
<div class="row">
<div class="col-12">
<input type="text" placeholder="Электронная почта" data-name="email" name="EMAIL" class="form-control field subscribe-field"/>
</div>
<div class="col-12">
<div id="big_subscribe_form_result" class="italic"></div>
<button class="btn subscribe-btn" type="submit"
onclick="AjaxFormRequestSubs('big_subscribe_form_result', 'big_subscribe_top_form'); return false;">
Подписаться
</button>
</div>
<div class="col-12">
<div class="privacy">Нажимая кнопку «Подписаться», Вы подтверждаете, что ознакомились с <a href="#">Политикой в отношении обработки персональных данных</a> и соглашаетесь с ее <a href="#">условиями</a>.
</div>
</div>
</div>
</form>
Здесь мы видим, что при клике на кнопку button должна отрабатывать функция AjaxFormRequestSubs. Напишем ее в script.js:
function AjaxFormRequestSubs(result_id, form_id)
{
jQuery.ajax({
url: '/ajax/subscribe.php', //Адрес подгружаемой страницы
type: "POST", //Тип запроса
dataType: "html", //Тип данных
data: jQuery("#" + form_id).serialize(),
success: function (response) { //Если все нормально
var resp = JSON.parse(response);
$('#'+result_id).html('<span>'+resp.message+'</span>')
setTimeout(function(){
$('#'+result_id).html('')
}, 4000);
},
error: function (response) { //Если ошибка
document.getElementById(result_id).innerHTML = "Ошибка при отправке формы";
}
});
}
Функция, с помощью технологии ajax отправляет данные в файл subscribe.php, где написан функционал подписки на новости:
<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
$result = false;
global $USER;
$mess = "";
if(!$APPLICATION->CaptchaCheckCode($_POST["captcha_word"],$_POST["captcha_sid"]) and $_POST["captcha_word"] and $_POST["captcha_sid"]){
$mess = 'Подтвердите что Вы не робот<br>';
$error = 1;
}
if(!$error){
CModule::IncludeModule("subscribe");
$arFields = Array(
"USER_ID" => ($USER->IsAuthorized()? $USER->GetID():false),
"FORMAT" => "html",
"SEND_CONFIRM" => "Y",
"EMAIL" => $_REQUEST['EMAIL'],
"CONFIRMED" => "Y",
"ACTIVE" => "Y",
"RUB_ID" => array(1,2)
);
$subscr = new CSubscription;
$ID = $subscr->Add($arFields);
if($ID) {
$result = true;
$mess = 'Спасибо, вы успешно подписались на рассылку';
} else {
$mess = $subscr->LAST_ERROR;
}
}
echo json_encode(['result' => $result, 'message' => $mess]);
?>
Параметры в $arFields можно написать подходящие для нужд конкретного сайта. Конкретно в этой строке осуществляется подписка: $ID = $subscr->Add($arFields);
Рассылка новостей при добавлении осуществляется с помощью событий OnAfterIBlockElementAdd и BeforePostingSendMail. Технология описана в этой заметке.