Вікові обмеження для категорій: технічна реалізація в 1С-Бітрікс

Інтернет-магазин запустив продаж мисливських товарів — і одразу отримав листа від Росспоживнагляду. Справа не в контенті, а у відсутності механізму обмеження доступу до категорії. Ми, інженери з 10-річним досвідом, знаємо, що вікові обмеження на рівні категорій — це не просто юридична формальність,
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Вікові обмеження для категорій: технічна реалізація в 1С-Бітрікс
Простий
~1 день

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1458
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1019
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    761
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    879
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    804
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1162

Інтернет-магазин запустив продаж мисливських товарів — і одразу отримав листа від Росспоживнагляду. Справа не в контенті, а у відсутності механізму обмеження доступу до категорії. Ми, інженери з 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 разів простіше в адмініструванні, ніж окрема таблиця. Це дає змогу керувати обмеженням прямо в адміністративній панелі без додаткового інтерфейсу.

Схема реалізації:

  1. Створити UF-поле для розділу через Налаштування → Користувацькі поля або програмно через CUserTypeManager. Тип поля — список (enumeration) або ціле число. Приклад значень: 0, 16, 18, 21.

  2. Прив'язати обмеження до дочірніх елементів. При виведенні каталогу компонент catalog звертається до методу CIBlockSection::GetList(). Тут додається логіка: якщо у розділу виставлено віковий поріг — перевірити сесію користувача.

  3. Зберігати підтверджений вік у сесії ($_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 успішних проектів із впровадження вікових обмежень. Зв'яжіться з нами для консультації — оцінимо ваш проект безкоштовно. Замовте аудит безпеки вашого каталогу сьогодні.