Создание сайтов на 1С-Битрикс

Подписка на рассылку - собственная форма и ajax-загрузка

HTML-код формы

<div class="subscribe__form_wrap">
	<form action="/ajax/subscribe.php" method="post" aria-label="Контактная форма" class="subscribe__form">
		<div class="form-inputs">
			<input size="40" class="input" aria-required="true" aria-invalid="false" placeholder="Ваш e-mail" value="" type="email" name="email" required>
			<div class="has-loader">
				<input class="btn btn-accent" type="submit" value="Подписаться">
			</div>
		</div>
	</form>
	<div class="form_error"></div>
</div>

JS-скрипт
document.addEventListener('DOMContentLoaded', function() {
    'use strict';


    function handleFormSubmit(e) {
      e.preventDefault();
      let form = e.target;
      BX.showWait(form);
      sendOrder(form);
    }

    let forms = document.querySelectorAll('.subscribe__form');

    [...forms].forEach(form => {
        form.addEventListener('submit', handleFormSubmit);
    });

    async function sendOrder(form) {

        let subscribe_wrap = form.parentElement,
            form_errorEl = form.parentElement.querySelector('.form_error');

        await fetch(form.getAttribute('action'), {
            method: 'POST',
            body: new FormData(form)
        })
        .then((result) => result.json())
        .then((result) => {
            BX.closeWait();
            if (result.status == 'success') {
                if(subscribe_wrap.classList.contains('subscribe__form_wrap') && result.message) {
                    subscribe_wrap.classList.add('result');
                    subscribe_wrap.innerHTML = result.message;
                }
            } else {
                if(form_errorEl && result.message) {
                    form_errorEl.innerHTML = result.message;
                }
                return false;
            }
        })
        .catch((error) => {
            BX.closeWait();
            console.error('Catch error:', error);
        });
    }
});

PHP-файл для обработки запроса /ajax/subscribe.php
<?php
$arResult = array();
if ($_POST['email'] && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {

require_once($_SERVER['DOCUMENT_ROOT']."/bitrix/modules/main/include/prolog_before.php");
    if(CModule::IncludeModule('subscribe')) {
        global $USER;
         
        // формируем массив с полями для создания подписки
        $arFields = Array(
            "USER_ID" => ($USER->IsAuthorized() ? $USER->GetID() : false),
            "FORMAT" => "html",
            "EMAIL" => $_POST['email'],
            "ACTIVE" => "Y",
            "RUB_ID" => array('1'), // массив ID рассылок
            "SEND_CONFIRM" => 'Y'
        );
         
 
        $subscr = new CSubscription;
 
        // создаем подписку
        $ID = $subscr->Add($arFields);
        if ($ID > 0){
            $arResult['status'] = 'success';
            $arResult['message'] = '<p>Спасибо!<br>Мы отправили письмо на адрес <b>'.$_POST['email'].'</b>. Подтвердите вашу почту, <u>перейдя по ссылке в письме</u>.</p>';
        } else {
            $arResult['status'] = 'error';
            $arResult['message'] = str_replace("<br>","",$subscr->LAST_ERROR);
        }
    }
 
} else {
    $arResult['status'] = 'error';
    $arResult['message'] = 'Неправильный email-адрес';
}
 
echo json_encode($arResult);
?>


Логотип SiteBERG
Изменено: 01.11.2025 12:55

Статьи

Что нужно сделать?