Модуль logictim.registration (версия 1.0.63+) рисует галочки с текстом согласия и пишет отметки в журнал 152-ФЗ. Всё через один класс ConsentForm: показать → проверить → записать.
Ответьте на один вопрос: где создана форма, в которую нужно добавить согласия?
В шаблоне веб-формы, перед кнопкой «Отправить»:
use Logictim\Registration\Consent\Form\ConsentForm;
echo ConsentForm::render([
'prefix' => 'lr_wf_6',
'source' => 'form',
'web_form_id' => 6,
'phone_field' => 'PHONE',
'email_field' => 'EMAIL',
'lookup' => 'phone',
'consents' => [
[
'text' => 'Согласен на обработку данных (#1:политика#)',
'document_ids' => [3],
'required' => true,
],
],
]);
| Поле в коде | Откуда взять |
|---|---|
'prefix' => 'lr_wf_6' | Любое уникальное имя блока на странице. Удобно: lr_wf_ + ID формы |
'source' => 'form' | Метка в журнале. Обычно form |
'web_form_id' => 6 | Сервисы → Веб-формы → ID формы в списке или в URL |
'phone_field' => 'PHONE' | В этой форме → вопрос с телефоном → символьный идентификатор (SID), не числовой ID |
'email_field' => 'EMAIL' | То же для поля e-mail |
'lookup' => 'phone' | Как искать ранее данное согласие: phone, email, any |
'consents' => [...] | Список галочек (см. ниже) |
'text' => '...' | Текст у галочки. #1:подпись# превратится в ссылку на документ |
'document_ids' => [3] | Админка модуля → документы согласия → ID документа |
'required' => true | Без галочки форма не уйдёт |
profile_id — взять галочки из профиля регистрации (админка модуля → профили).consents — свой список в коде (как в примере выше).В шаблоне, внутри <form>, перед кнопкой:
$config = [
'prefix' => 'lr_subscribe',
'source' => 'subscribe',
'lookup' => 'phone',
'consents' => [
[
'text' => 'Согласен на рассылку (#1:условия#)',
'document_ids' => [12],
'required' => true,
],
],
];
echo \Logictim\Registration\Consent\Form\ConsentForm::render($config);
Один раз задали $config — тот же массив на шагах 3 и 4.
Вариант 1. Из профиля регистрации (как на странице регистрации):
$config = [
'prefix' => 'lr_form',
'source' => 'form',
'profile_id' => 1, // ID профиля в админке модуля; 0 = первый профиль на сайте
];
Вариант 2. Свой набор в коде:
$config = [
'prefix' => 'lr_subscribe',
'source' => 'subscribe',
'consents' => [
[
'text' => '...',
'document_ids' => [12],
'required' => true,
],
],
];
Указывается либо profile_id, либо consents — не оба сразу.
Через компонент (удобно в визуальном редакторе):
$APPLICATION->IncludeComponent('logictim:consent.request', '', [
'FIELD_PREFIX' => 'lr_subscribe',
'SOURCE' => 'subscribe',
'CONSENTS' => [ /* массив consents как выше */ ],
]);
При обычной отправке формы (submit) ничего не делайте — скрипт подключается из render() и блокирует отправку без обязательных галочек.
AJAX-отправка (без submit формы) — одна строка перед вашим запросом:
if (!lrFormConsentValidate(document.getElementById('my_form'))) {
return;
}
Функция lrFormConsentValidate — глобальная, подключается вместе с блоком согласий. Показывает текст ошибки и подсвечивает неотмеченные галочки.
$phone = trim((string)$request->getPost('PHONE'));
$subject = ConsentForm::subjectFromValues([
'phone' => $phone,
'lookup' => 'phone',
]);
if (!ConsentForm::validate($config, $request, $subject)->isSuccess()) {
// ошибка пользователю
}
Модуль не знает имена ваших полей — телефон/e-mail читаете вы и передаёте в $subject.
Имена галочек модуль создаёт сам: lr_subscribe_consent[0], lr_subscribe_consent[1]…
ConsentForm::grant($config, $request, $subject, $idЗаявки);
$idЗаявки — ID созданной записи (лид, подписка и т.п.). Можно 0, если привязка не нужна.
// шаблон
$config = [ /* как в шаге 1 */ ];
echo ConsentForm::render($config);
// обработчик
Loader::includeModule('logictim.registration');
$request = Context::getCurrent()->getRequest();
$phone = trim((string)$request->getPost('PHONE'));
$subject = ConsentForm::subjectFromValues(['phone' => $phone, 'lookup' => 'phone']);
if (!ConsentForm::validate($config, $request, $subject)->isSuccess()) {
die('Нужно отметить согласие');
}
$id = 123; // ID после вашего сохранения
ConsentForm::grant($config, $request, $subject, $id);
| Способ задания галочек | Текст ошибки |
|---|---|
profile_id — из профиля регистрации |
Из настроек этого профиля в админке модуля: поле «Обязательно согласие на обработку данных» (как на странице регистрации) |
consents — свой список в коде |
Параметр required_message в $config, если задали. Иначе — стандартная фраза модуля |
| Веб-форма (вариант А) | Тот же принцип: из profile_id или required_message, иначе стандартная фраза |
Текст одинаковый в JS (lrFormConsentValidate) и в PHP (validate) — модуль подставляет его в блок при render().
Пример со своим текстом:
$config = [
'prefix' => 'lr_subscribe',
'source' => 'subscribe',
'required_message' => 'Пожалуйста, отметьте согласие на рассылку',
'consents' => [ /* ... */ ],
];
| Ключ | Зачем |
|---|---|
prefix | Уникальное имя блока |
source | Метка в журнале: form, subscribe, one_click |
profile_id | Галочки из профиля регистрации |
consents | Свой список галочек |
required_message | Текст ошибки (для consents; для profile_id не нужен — берётся из профиля) |
web_form_id | Только вариант А |
phone_field, email_field | Только вариант А — SID полей |
lookup | phone, email, any |
sale.order.ajax эта инструкция не нужна — включите «Согласия на заказе» в настройках модуля.<form>.$config на render, validate, grant (вариант Б).validate и grant.$subject — из вашего кода, не из имён полей модуля.