Для организации рассылки в системе Битрикс имеется специальный модуль «Рассылки». Посредством модуля удобно собирать базу подписчиков, а так же производить рассылку. Более подробно о работе модуля можно почитать в официальной документации. Как известно модуль умеет разделять рассылку так же по рубрикам. Бывает, что нужно сделать простую форму подписки, при том, что рубрик несколько, подписать «одним махом» на все рубрики на сайте. Попробуем сделать простую форму подписки. Хочу обратить внимание на то, отправка 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».
А вообще, лучше скачать библиотеку на свой сервер, и подключать с него...
зато если пользователь уже загружал на другом сайте данную бибилиотеку, что скорей всего, т.к. для этого все и указывают источником google, то бибилиотека загрузится из кэша еще быстрее
а куда файл ajax.php ложить?
В примере он размещается в корне, путь к файлу-скрипту изменяется в строке: $.getJSON('ajax.php'
Большое спасибо, работает!