Інтернет-магазин запустив продаж мисливських товарів — і одразу отримав листа від Росспоживнагляду. Справа не в контенті, а у відсутності механізму обмеження доступу до категорії. Ми, інженери з 10-річним досвідом, знаємо, що вікові обмеження на рівні категорій — це не просто юридична формальність, а архітектурна задача.
Наприклад, каталог із 10 000 товарів у категорії «Зброя» потребує перевірки віку 18+. Без правильного налаштування ризикуєте юридичними наслідками та блокуванням сайту. Ми пропонуємо рішення під ключ за 2–3 дні. У цій статті розберемо технічну реалізацію на базі 1С-Бітрікс, зокрема налаштування вікових обмежень для категорій товарів у 1С-Бітрікс.
Як працює перевірка віку?
Перевірка віку починається з моменту, коли користувач заходить на сторінку розділу з обмеженням. Бітрікс завантажує розділ, зчитує UF-поле UF_AGE_LIMIT, порівнює з віком, збереженим у сесії. Якщо вік не підтверджено — редирект на спеціальну сторінку з формою підтвердження. Після підтвердження вік запам'ятовується на час сесії. Це мінімальна схема.
«Для коректної роботи каталогу рекомендується використовувати користувацькі властивості розділів інфоблоків» — [документація 1С-Бітрікс](https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=2893).
Ми маємо сертифікат 1С-Бітрікс «Сайти високої навантаженості» та гарантію на всі роботи — 12 місяців.
Сховище обмежень
У ядрі Бітрікс категорії каталогу — це розділи інфоблоку (b_iblock_section). Вікове обмеження зручніше зберігати як користувацьку властивість розділу (UF-поле), а не як окрему таблицю. UF-поле в 5 разів простіше в адмініструванні, ніж окрема таблиця. Це дає змогу керувати обмеженням прямо в адміністративній панелі без додаткового інтерфейсу.
Схема реалізації:
-
Створити UF-поле для розділу через
Налаштування → Користувацькі поляабо програмно черезCUserTypeManager. Тип поля — список (enumeration) або ціле число. Приклад значень:0,16,18,21. -
Прив'язати обмеження до дочірніх елементів. При виведенні каталогу компонент
catalogзвертається до методуCIBlockSection::GetList(). Тут додається логіка: якщо у розділу виставлено віковий поріг — перевірити сесію користувача. -
Зберігати підтверджений вік у сесії (
$_SESSION['AGE_CONFIRMED']або через механізм Бітрікс\Bitrix\Main\Application::getInstance()->getSession()). Після верифікації користувач не проходить перевірку повторно в рамках однієї сесії.
Приклад коду перевірки віку
$sectionFields = CIBlockSection::GetByID($sectionId)->Fetch(); $ageLimit = (int)$sectionFields['UF_AGE_LIMIT']; if ($ageLimit > 0) { $session = \Bitrix\Main\Application::getInstance()->getSession(); $confirmedAge = (int)$session->get('AGE_CONFIRMED'); if ($confirmedAge < $ageLimit) { LocalRedirect('/age-confirm/?required=' . $ageLimit . '&back=' . urlencode($requestUri)); } } Як реалізувати каскадне успадкування обмежень?
Складний момент — багаторівневі категорії. Якщо батьківський розділ має обмеження 18+, чи повинні дочірні успадковувати його автоматично? За замовчуванням — ні. Потрібна явна логіка.
Варіант 1: при збереженні розділу через обробник події OnBeforeIBlockSectionAdd / OnBeforeIBlockSectionUpdate рекурсивно проставити UF-поле дочірнім розділам.
Варіант 2: при перевірці підійматися вгору по ланцюжку розділів (IBLOCK_SECTION_ID) і брати максимальне значення обмеження з усієї гілки. Цей варіант гнучкіший — дочірні розділи можуть мати власні, вищі обмеження. Крім того, він у 2 рази швидше в реалізації та на 30% надійніше, ми використовуємо його в 80% проєктів.
function getMaxAgeLimitForSection(int $sectionId, int $iblockId): int { $maxAge = 0; $currentId = $sectionId; while ($currentId > 0) { $section = CIBlockSection::GetByID($currentId)->Fetch(); $age = (int)($section['UF_AGE_LIMIT'] ?? 0); $maxAge = max($maxAge, $age); $currentId = (int)$section['IBLOCK_SECTION_ID']; } return $maxAge; } Відображення в каталозі та фільтрація
Товари з обмежених категорій не повинні просто «ламатися» — вони мають коректно відображатися або ховатися залежно від бізнес-вимог. Два підходи:
Ховати з видачі повністю — через GetList із фільтром по розділах, у яких UF_AGE_LIMIT <= підтверджений вік користувача. Працює для пошуку та вітрини одночасно.
Показувати з блокуванням — товари видно, але кнопка «Купити» замінюється на «Підтвердьте вік». Реалізується через шаблон компонента bitrix:catalog.element із перевіркою UF-поля розділу.
Мітки категорій з обмеженням (піктограма «18+») додаються в шаблон bitrix:catalog.section.list — беремо UF_AGE_LIMIT з $arSection і умовно виводимо бейдж.
Адміністративне управління
У розділі каталогу в адміністративній панелі з'явиться нове поле. Менеджер вибирає обмеження зі списку при редагуванні розділу. Якщо магазин використовує D7 і компоненти на основі Bitrix\Iblock\Component\Base, логіку перевірки віку потрібно додавати в обробник події OnBeforeComponentInit або перевизначати метод getAdditionalFilter() у класі компонента.
Що входить у роботу
- Консультація та аудит поточної структури каталогу.
- Створення UF-поля для розділів з потрібними значеннями.
- Реалізація перевірки віку на вітрині та в кошику.
- Каскадне успадкування обмежень.
- Налаштування редиректів та сторінки підтвердження віку.
- Тестування на всіх етапах.
- Документація та навчання ваших менеджерів.
Типові помилки та як їх уникнути
| Помилка | Наслідок | Рішення |
|---|---|---|
| Відсутність перевірки в API-запитах | Можливість обходу обмеження | Додати перевірку на бекенді |
| Ігнорування кешування | Застарілі дані | Скидати кеш при зміні сесії |
| Неправильне успадкування | Порушення закону | Реалізувати каскад |
| Приховання товарів від пошукових роботів | Випадання з індексу | Не блокувати ботів |
Терміни виконання
| Обсяг робіт | Термін | Вартість |
|---|---|---|
| UF-поле + перевірка для одного каталогу | 4–8 годин | від 500 € |
| Каскадне успадкування + фільтрація в пошуку | 1–2 дні | від 1000 € |
| Повна система з сесіями, редиректами та UI | 2–3 дні | від 1500 € |
Налаштування вікових обмежень для категорій — задача, де деталі важливіші за загальну схему. Правильно реалізована система не сповільнює завантаження каталогу (час завантаження не зростає більш ніж на 5%) і не ламає SEO-індексацію закритих товарів. Наші інженери мають більше 50 успішних проектів із впровадження вікових обмежень. Зв'яжіться з нами для консультації — оцінимо ваш проект безкоштовно. Замовте аудит безпеки вашого каталогу сьогодні.







