Настройка возрастных ограничений для категорий товаров 1С-Битрикс
Интернет-магазин запустил продажу охотничьих товаров — и тут же получил письмо от Роспотребнадзора. Дело не в контенте, а в отсутствии механизма ограничения доступа к категории. Возрастные ограничения на уровне категорий — это не просто юридическая формальность, а архитектурная задача, которую 1С-Битрикс позволяет решить несколькими способами в зависимости от требований бизнеса.
Где живут настройки: структура инфобоков и разделов
В ядре Битрикс категории каталога — это разделы инфоблока (b_iblock_section). Возрастное ограничение удобнее всего хранить как пользовательское свойство раздела (UF-поле), а не как отдельную таблицу. Это даёт возможность управлять ограничением прямо в административной панели без дополнительного интерфейса.
Схема реализации:
-
Создать 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('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-индексацию закрытых товаров.







