О web-разработке
и даже немного больше...

Делаем простую ajax-форму подписки на Bitrix

bitrix-subscribe-formДля организации рассылки в системе Битрикс имеется специальный модуль «Рассылки». Посредством модуля удобно собирать базу подписчиков, а так же производить рассылку. Более подробно о работе модуля можно почитать в официальной документации. Как известно модуль умеет разделять рассылку так же по рубрикам. Бывает, что нужно сделать простую форму подписки, при том, что рубрик несколько, подписать «одним махом» на все рубрики на сайте. Попробуем сделать простую форму подписки. Хочу обратить внимание на то, отправка email-ла подписчика будет через Ajax, это известное удобство, которое обуславливается отсутствием перезагрузки страницы.

Первым делом следует подключить библиотеку JQuery:

<script type="text/javascript"
src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>

А вообще, лучше скачать библиотеку на свой сервер, и подключать с него, т.к. приходилось сталкиваться с тем, что страницы долго «висят», потому что библиотека по каким-то причинам иногда передается с тормозами со стороннего ресурса.

Форма простая, оформление остается за вами:

<div class="subcribe">
	<label>Введите ваш email адрес:</label><br>
	<input type="text" name="email">
	<input type="button" name="send" value="Отправить">
</div>

С формой так же работаем по-простому:

<script type="text/javascript">
$(document).ready(function(){
	$('input[name="send"]').click(function(){
		$.getJSON('ajax.php', {
			email:$('input[name="email"]').val()
		}, function(data){
			if (data.status=='ok'){
				alert('На ваш почтовый адрес отправлено письмо с подтверждением подписки.');
			} else {
				alert(data.msg);
			}
		});
	});
});
</script>

Итак, у нас есть форма, есть код javascript, который и будет производить отправку email на сервер, и принимать ответ от сервера. Теперь посмотрим, что у нас будет на стороне сервера, скрипт который мы назовем ajax.php будет собственно и обрабатывать запросы с формы, и отдавать ответ в формате Json.

<?php
$arResult = array();
if ($_REQUEST['email'] && filter_var($_REQUEST['email'], FILTER_VALIDATE_EMAIL)){
	
// bitrix api include
require_once($_SERVER['DOCUMENT_ROOT']."/bitrix/modules/main/include/prolog_before.php");
	CModule::IncludeModule('subscribe');
	global $USER;

	// запрос всех рубрик
	$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->IsAuthorized() ? $USER->GetID() : false),
			"FORMAT" => "html",
			"EMAIL" => $_REQUEST['email'],
			"ACTIVE" => "N",
			"RUB_ID" => $arRubIDS,
			"SEND_CONFIRM" => 'Y'
		);
		

		$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);
		}

} else $arResult['status'] = 'error';

echo json_encode($arResult);
?>

Обратите внимание, параметр «SEND_CONFIRM» => ‘Y’ при добавлении подписки означает, что подписка должна быть подтверждена по Email. Если в этом нет необходимости достаточно поменять значение параметра на «N».

Опубликован: 07.05.2015 г.

См. также:

«Не удалось установить соединение с сервером. Проверьте …».
Получение Email-адреса покупателя в заказе (Bitrix D7)
Работа с URL-адресами в Bitrix D7
Работа с купонами в Bitrix API
Добавляем пункт меню для списков в админке Битрикс
Диалоговые окна в Bitrix API
Создание инфоблока при установке модуля
Создание копии корзины из заказа на Bitrix D7

Комментарии

  1. Autochapa пишет:

    А вообще, лучше скачать библиотеку на свой сервер, и подключать с него...

    зато если пользователь уже загружал на другом сайте данную бибилиотеку, что скорей всего, т.к. для этого все и указывают источником google, то бибилиотека загрузится из кэша еще быстрее

  2. прапор Серьезный пишет:

    а куда файл ajax.php ложить?

    1. htmaker пишет:

      В примере он размещается в корне, путь к файлу-скрипту изменяется в строке: $.getJSON('ajax.php'

  3. Василий пишет:

    Большое спасибо, работает!

Добавить комментарий для htmaker Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии
  • Загрузка...
Друзья сайта