Налаштування попередження про вікові обмеження 1С-Бітрікс
Спливаюче вікно «Вам є 18 років?» — це не декоративний елемент. Відсутність такого попередження на сайті, що торгує алкоголем, тютюном або зброєю, є адміністративним правопорушенням. При цьому реалізувати його «на коліні» через простий popup недостатньо: важливі обробка ботами, коректна робота з SEO-краулерами, зберігання підтвердження та поведінка при відмові.
Механізм зберігання підтвердження
Ключове рішення — де зберігати факт згоди. Три варіанти:
Cookie — найпоширеніший. Встановлюється на 24 години або до кінця сесії. Плюс: не потребує серверних ресурсів. Мінус: користувач може очистити cookies.
Сесія Бітрікс — надійніше для поточного візиту. Використовується \Bitrix\Main\Application::getInstance()->getSession()->set('AGE_CONFIRMED', true). Скидається при закритті браузера.
Профіль користувача — якщо користувач авторизований, прапор підтвердження можна зберігати в користувацькому полі (UF_AGE_CONFIRMED, тип boolean). Після одноразового підтвердження — більше не запитувати. Для анонімів комбінується з cookie.
Рекомендована схема: cookie для анонімів (30 днів) + UF-поле для зареєстрованих користувачів.
Компонент попередження
Попередження реалізується як окремий компонент, що підключається в шаблоні сайту (header.php або через bitrix:main.include). Компонент перевіряє наявність cookie/сесії і, якщо підтвердження не отримано, виводить оверлей.
Структура компонента:
/local/components/custom/age.warning/
├── class.php
├── templates/
│ └── .default/
│ ├── template.php
│ └── script.js
└── .description.php
В class.php — логіка перевірки та встановлення cookie:
public function executeComponent() {
$cookieName = 'AGE_CONFIRMED';
$request = \Bitrix\Main\Application::getInstance()->getContext()->getRequest();
if ($request->getCookie($cookieName) === 'Y') {
return; // Підтвердження вже є
}
if ($this->arParams['CHECK_AUTH'] === 'Y') {
global $USER;
if ($USER->IsAuthorized()) {
$userFields = CUser::GetByID($USER->GetID())->Fetch();
if ($userFields['UF_AGE_CONFIRMED'] === '1') {
return;
}
}
}
$this->IncludeComponentTemplate();
}
Поведінка при відмові
Це критичний момент, який часто упускають. Якщо користувач натиснув «Ні, мені немає 18» — що відбувається?
- Редирект на спеціальну сторінку з повідомленням про недоступність контенту
- Блокування можливості повернутися назад через
history.pushState - Запис у cookie відмови (
AGE_DENIED=Y) на 24 години, щоб не показувати popup знову
Сторінка відмови не повинна містити посилань на захищені розділи. Її URL зазвичай /age-restricted/ або /sorry/.
SEO та боти
Пошукові краулери не повинні блокуватися попередженням. Правильна реалізація:
- Попередження виводиться лише через JS після завантаження сторінки — HTML-контент доступний для індексації
- Серверна перевірка (302-редирект) застосовується лише для реальних користувачів, виключаючи User-Agent краулерів зі списку
- Сторінки каталогу з товарами 18+ не закриваються від індексації — лише кнопка «Купити» замінюється
// Перевірка: чи це не бот
const isBot = /bot|crawl|spider|slurp|teoma/i.test(navigator.userAgent);
if (!isBot && !getCookie('AGE_CONFIRMED')) {
showAgeConfirmModal();
}
Інтеграція з журналом подій
Для юридично значущих сайтів (ліцензована діяльність) факт підтвердження віку фіксується в лог. Через обробник після натискання кнопки «Так» надсилається AJAX-запит до контролера, який записує час, IP, User-Agent та ідентифікатор сесії — через \Bitrix\Main\Diag\Logger або до користувацької таблиці.
Терміни виконання
| Варіант реалізації | Термін |
|---|---|
| Базовий popup з cookie | 4–6 годин |
| Компонент із сесією + редирект при відмові | 8–12 годин |
| Повна система: авторизовані + анонімні + лог | 1–2 дні |
Правильно налаштоване попередження — непомітна, але юридично важлива частина інфраструктури магазину.







