Настройка возрастных ограничений для категорий товаров 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 Appointment Booking Widget for a Medical Center
    761
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    880
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    804
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1163

Интернет-магазин запустил продажу охотничьих товаров — и тут же получил письмо от Роспотребнадзора. Дело не в контенте, а в отсутствии механизма ограничения доступа к категории. Мы, инженеры с 10-летним опытом, знаем, что возрастные ограничения на уровне категорий — это не просто юридическая формальность, а архитектурная задача.

Например, каталог из 10 000 товаров в категории «Оружие» требует проверки возраста 18+. Без правильной настройки рискуете не только штрафом до $4.5k–6.5k., но и блокировкой сайта. Мы предлагаем решение под ключ за 2–3 дня. В этой статье разберём техническую реализацию на базе 1С‑Битрикс.

Как работает проверка возраста?

Проверка возраста начинается с момента, когда пользователь заходит на страницу раздела с ограничением. Битрикс загружает раздел, считывает UF-поле UF_AGE_LIMIT, сравнивает с возрастом, сохранённым в сессии. Если возраст не подтверждён — редирект на специальную страницу с формой подтверждения. После подтверждения возраст запоминается на время сессии. Это минимальная схема.

«Для корректной работы каталога рекомендуется использовать пользовательские свойства разделов инфоблоков» — документация 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-поля для разделов с нужными значениями.
  • Реализация проверки возраста на витрине и в корзине.
  • Каскадное наследование ограничений.
  • Настройка редиректов и страницы подтверждения возраста.
  • Тестирование на всех этапах.
  • Документация и обучение ваших менеджеров.

Типичные ошибки и как их избежать

Ошибка Последствие Решение
Отсутствие проверки в API-запросах Возможность обхода ограничения Добавить проверку на бэкенде
Игнорирование кэширования Устаревшие данные Сбрасывать кэш при изменении сессии
Неправильное наследование Нарушение закона Реализовать каскад
Скрытие товаров от поисковых роботов Выпадение из индекса Не блокировать ботов

Сроки выполнения

Объём работ Срок
UF-поле + проверка для одного каталога 4–8 часов
Каскадное наследование + фильтрация в поиске 1–2 дня
Полная система с сессиями, редиректами и UI 2–3 дня

Настройка возрастных ограничений для категорий — задача, где детали важнее общей схемы. Правильно реализованная система не замедляет загрузку каталога (время загрузки не растёт более чем на 5%) и не ломает SEO-индексацию закрытых товаров. Наши инженеры имеют более 50 успешных проектов по внедрению возрастных ограничений. Свяжитесь с нами для консультации — оценим ваш проект бесплатно. Закажите аудит безопасности вашего каталога сегодня.