Налаштування вікових обмежень для категорій товарів 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування вікових обмежень для категорій товарів 1С-Бітрікс
Проста
~1 робочий день
Часті питання

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

Етапи розробки

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

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування вікових обмежень для категорій товарів 1С-Бітрікс

Інтернет-магазин запустив продаж мисливських товарів — і одразу отримав лист від контролюючого органу. Справа не в контенті, а у відсутності механізму обмеження доступу до категорії. Вікові обмеження на рівні категорій — це не просто юридична формальність, а архітектурна задача, яку 1С-Бітрікс дозволяє вирішити кількома способами залежно від вимог бізнесу.

Де живуть налаштування: структура інфоблоків та розділів

У ядрі Бітрікс категорії каталогу — це розділи інфоблока (b_iblock_section). Вікове обмеження найзручніше зберігати як користувацьку властивість розділу (UF-поле), а не як окрему таблицю. Це дає можливість керувати обмеженням прямо в адміністративній панелі без додаткового інтерфейсу.

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

  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('USER_CONFIRMED_AGE');

    if ($confirmedAge < $ageLimit) {
        LocalRedirect('/age-confirm/?required=' . $ageLimit . '&back=' . urlencode($requestUri));
    }
}

Каскадне успадкування обмежень

Складний момент — багаторівневі категорії. Якщо батьківський розділ має обмеження 18+, чи повинні дочірні успадковувати його автоматично? За замовчуванням — ні. Потрібна явна логіка.

Варіант 1: при збереженні розділу через обробник події OnBeforeIBlockSectionAdd / OnBeforeIBlockSectionUpdate рекурсивно проставити UF-поле дочірнім розділам.

Варіант 2: при перевірці підніматися вгору по ланцюжку розділів (IBLOCK_SECTION_ID) і брати максимальне значення обмеження з усієї гілки. Цей варіант гнучкіший — дочірні розділи можуть мати власні, вищі обмеження.

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-поле + перевірка для одного каталогу 4–8 годин
Каскадне успадкування + фільтрація в пошуку 1–2 дні
Повна система з сесіями, редиректами та UI 2–3 дні

Налаштування вікових обмежень для категорій — задача, де деталі важливіші за загальну схему. Правильно реалізована система не сповільнює завантаження каталогу і не ламає SEO-індексацію закритих товарів.