Согласие в собственных компонентах
Как добавить согласие в собственные компоненты
Включение поддержки соглашений в собственных компонентах рассмотрим на примере компонента подписки на рассылку
sender.subscribe
Компонент включается в дизайн сайта и служит формой для подписки на рассылки. Компонент стандартный и входит в дистрибутив модуля.
Описание компонента «Форма подписки» в пользовательской документации.
.
Добавление секции в настройки компонента
В файле параметров вашего компонента
.parameters.php
В файле .parameters.php содержится описание входных параметров компонента...
Подробнее ...
достаточно объявить параметр "USER_CONSENT" => array()
:
<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); $arComponentParameters = array( "GROUPS" => array( ), "PARAMETERS" => array( "AJAX_MODE" => array(), "USER_CONSENT" => array(), ) );
и в настройках компонента появится секция Согласие пользователя .
USER_CONSENT
в Пользовательской документации. Если же вам нужна собственная логика работы компонентов (например, вы хотите подключить стороннюю
CAPTCHA
О настройке и подключении штатной CAPTCHA есть отдельная глава.
), используйте
API
Пространство имен UserConsent для работы с соглашениями пользователей относится к Главному модулю. Подробнее... .
Вывод в форме
Для вывода
созданных соглашений
Соглашение - текст, который должен прочитать пользователь и согласиться с ним. В дистрибутиве есть стандартный вариант соглашения, но у администратора всегда есть возможность создать свой текст соглашения. Для этого на странице Соглашения воспользуйтесь кнопкой Добавить и заполните открывшуюся форму .
Подробнее...
используется компонент
main.userconsent.request
Компонент позволяет выполнить требования ФЗ-152. Может использоваться как самостоятельно, так и включённым в другие компоненты.
Описание компонента «Запрос согласия пользователя» в пользовательской документации.
. Компонент умеет сохранять полученное согласие. Он выводит чекбокс с подписью, по нажатию на которую выводится окно с текстом соглашения. Окно с текстом адаптивное и уже сделано и под мобильные устройства:
Этот компонент нужно подключить в шаблоне вашего компонента перед кнопкой отправки формы.
Есть два вида форм, в которых компонент используется по-разному.
Простая форма с событием submit (стандартная get/post отправка формы с событием submit).
В этом случае подключаем компонент перед кнопкой отправки формы:
<form method="POST"> <input name="EMAIL" placeholder="Email"> <input name="PHONE" placeholder="Телефон"> <input name="NAME" placeholder="Имя"> <br> <?if ($arParams['USER_CONSENT'] == 'Y'):?> <?$APPLICATION->IncludeComponent( "bitrix:main.userconsent.request", "", array( "ID" => $arParams["USER_CONSENT_ID"], "IS_CHECKED" => $arParams["USER_CONSENT_IS_CHECKED"], "AUTO_SAVE" => "Y", "IS_LOADED" => $arParams["USER_CONSENT_IS_LOADED"], "REPLACE" => array( 'button_caption' => 'Подписаться!', 'fields' => array('Email', 'Телефон', 'Имя') ), ) );?> <?endif;?> <input type="submit" name="subscribe" value="Подписаться!"> </form>
Указанные в примере параметры $arParams
появятся в шаблоне вашего компонента при наличии в .parameters.php блока "USER_CONSENT" => array()
.
В параметре REPLACE передается:
- button_caption - название кнопки отправки формы;
- fields - массив названий полей, которые попадут в текст соглашения.
Форма без события submit (отправка через ajax и иные механизмы, реализованные в js, то есть без события submit у формы).
В компонент в параметре SUBMIT_EVENT_NAME
передаётся название события, при котором появится окно запроса согласия.
Далее, добавляется обработчик события принятия соглашения. Если обработчик поймает событие - значит, согласие получено и можно отправлять форму/данные или выполнять какое-то действие.
<div id="my_container"> <input type="text" placeholder="Электронный адрес" name="EMAIL"> <input type="submit" id="fire_event" value="Отправить"> <br> <?if ($arParams['USER_CONSENT'] == 'Y'):?> <?$APPLICATION->IncludeComponent( "bitrix:main.userconsent.request", "", array( 'ID' => $arParams["USER_CONSENT_ID"], "IS_CHECKED" => $arParams["USER_CONSENT_IS_CHECKED"], "IS_LOADED" => "Y", "AUTO_SAVE" => "N", 'SUBMIT_EVENT_NAME' => 'my-event-name', 'REPLACE' => array( 'button_caption' => 'Отправить', 'fields' => array('Электронный адрес') ), ) );?> <?endif;?> </div> <script type="text/javascript"> BX.ready(function () { var submitBtn = BX('fire_event'); BX.bind(submitBtn, 'click', function(){ BX.onCustomEvent('my-event-name', []); }); if (!BX.UserConsent) { return; } var control = BX.UserConsent.load(BX('my_container')); if (!control) { return; } BX.addCustomEvent( control, BX.UserConsent.events.save, function (data) { console.log('js event:', 'save', data); // успешно! // отправляем ajax // или другие действия } ); }); </script>
Внешнее сканирование
В параметрах компонента есть параметр AUTO_SAVE. Если его значение равно Y
, то согласие автоматически сохраняется компонентом. Если вам нужно сохранить согласие самим, то передайте значение N
. А для ручного добавления согласия вызовите следующий код:
\Bitrix\Main\UserConsent\Consent::addByContext( $arParams["USER_CONSENT_ID"] );
и Ваше мнение важно для нас