Настройка возрастных ограничений для категорий товаров 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка возрастных ограничений для категорий товаров 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1181
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    813
  • 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 Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка возрастных ограничений для категорий товаров 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-индексацию закрытых товаров.