Как вывести раздел каталога в 1С-Битрикс через catalog.section?

Как вывести раздел каталога в 1С-Битрикс через catalog.section?

Вы открыли section.php шаблона catalog, вставили bitrix:catalog.section — и на витрине пусто. Товары в админке есть, раздел в URL правильный, а список не рисуется: частая проблема после копирования шаблона, когда умный фильтр и catalog.section «молча» не синхронизированы. Чаще всего виноваты не «сломанный каталог», а три параметра: SECTION_ID, INCLUDE_SUBSECTIONS и FILTER_NAME. Ниже — пошаговая настройка catalog.section через IncludeComponent: от выбора компонента до связки с умным фильтром и чек-листа, если раздел снова окажется пустым.

catalog.section выводит элементы одного раздела инфоблока, а не дерево подразделов. Для витрины магазина обычно хватает комплексного bitrix:catalog, но в кастомном шаблоне section.php вы правите именно catalog.section. Проверьте IBLOCK_ID, SECTION_ID или SECTION_CODE, INCLUDE_SUBSECTIONS и одно имя FILTER_NAME у списка и catalog.smart.filter - это закрывает большинство кейсов "пустого раздела".

Речь про 1С-Битрикс: Управление сайтом, не про Bitrix24. Если каталог ещё не создан, сначала настройте инфоблок и разделы. IncludeComponent - способ вставить готовый блок: вы передаёте параметры, компонент выбирает товары и отдаёт их в шаблон.

Выберите catalog.section, catalog.section.list или комплексный catalog

Таблица сравнения catalog.section, catalog.section.list и bitrix:catalog

catalog.section.list рисует дерево подразделов - папки внутри раздела. catalog.section рисует сами товары (элементы инфоблока) выбранного раздела. bitrix:catalog - комплексный компонент: внутри него уже связаны фильтр, список разделов, список товаров и карточка. На типовом интернет-магазине стартуют с комплексного catalog; одиночный catalog.section нужен, когда вы выносите список на отдельную страницу или собираете кастомный шаблон в /local/templates.

Задача Компонент Когда не подходит
Показать подкатегории catalog.section.list Нужны карточки товаров, а не папки
Показать товары раздела catalog.section Нужен весь магазин "из коробки" с ЧПУ и корзиной
Готовый магазин с фильтром и карточкой bitrix:catalog Нужен только блок "похожие товары" на лендинге

Делайте: для страницы раздела в комплексном catalog правьте section.php шаблона, а не корневой index.php. Не делайте: не подключайте catalog.section.list вместо catalog.section, если ждёте сетку товаров - получите список папок.

Запуск магазина целиком - в гайде по интернет-магазину. Форма параметров в админке - через .parameters.php; здесь фокус на IncludeComponent в PHP.

Подключите catalog.section через IncludeComponent с IBLOCK_ID и SECTION_CODE

Схема подключения catalog.section через IncludeComponent с IBLOCK_ID и SECTION_CODE

Минимальный вызов в section.php кастомного шаблона catalog (значения подставьте из своего проекта):

<?php
$APPLICATION->IncludeComponent(
    'bitrix:catalog.section',
    '.default',
    [
        'IBLOCK_TYPE' => 'catalog',
        'IBLOCK_ID' => 2,
        'SECTION_ID' => $arResult['VARIABLES']['SECTION_ID'],
        'SECTION_CODE' => $arResult['VARIABLES']['SECTION_CODE'],
        'PAGE_ELEMENT_COUNT' => 20,
        'ELEMENT_SORT_FIELD' => 'sort',
        'ELEMENT_SORT_ORDER' => 'asc',
        'INCLUDE_SUBSECTIONS' => 'Y',
        'DISPLAY_BOTTOM_PAGER' => 'Y',
        'CACHE_TYPE' => 'A',
        'CACHE_TIME' => '36000000',
    ],
    $component
);
?>
  1. Укажите IBLOCK_TYPE и IBLOCK_ID того каталога, где лежат товары - ID смотрите в админке "Контент - Инфоблоки".
  2. Передайте SECTION_ID или SECTION_CODE из $arResult['VARIABLES'] комплексного catalog - так ЧПУ раздела совпадёт с выборкой.
  3. Задайте PAGE_ELEMENT_COUNT и сортировку ELEMENT_SORT_FIELD / ELEMENT_SORT_ORDER под витрину.
  4. Включите DISPLAY_BOTTOM_PAGER, если товаров больше, чем помещается на одной странице.
  5. Сохраните шаблон и откройте раздел на фронте в режиме инкогнито.
  6. Сбросьте кэш компонента после первой правки параметров.

Делайте: в комплексном catalog берите SECTION_ID из VARIABLES, а не хардкодьте число в шаблоне - иначе все разделы покажут одну и ту же выборку. Не делайте: не оставляйте пустые IBLOCK_ID и SECTION_ID одновременно без осознанного SHOW_ALL_WO_SECTION - список может оказаться пустым или слишком широким.

Схема страницы раздела:
URL раздела → комплексный catalog → section.php → catalog.smart.filter (опционально) → catalog.section → шаблон .default → клик ведёт в catalog.element

Настройте INCLUDE_SUBSECTIONS и SHOW_ALL_WO_SECTION, если раздел "пустой"

Чеклист INCLUDE_SUBSECTIONS и SHOW_ALL_WO_SECTION при пустом разделе catalog.section

Товары во вложенных подразделах, а родительский раздел пуст? В реальном проекте это ломает витрину чаще, чем кажется: поставьте INCLUDE_SUBSECTIONS => 'Y' — компонент возьмёт элементы из дочерних папок. Без этого catalog.section смотрит только текущую папку.

SHOW_ALL_WO_SECTION => 'Y' выводит все товары инфоблока вне дерева разделов - для лендинга "все товары". Справка предупреждает: DETAIL_URL может сломаться; помогает BY_LINK => 'Y'. На обычной категории этот режим не включайте.

Делайте: на витрине категории держите INCLUDE_SUBSECTIONS = Y, если структура каталога многоуровневая. Не делайте: не включайте SHOW_ALL_WO_SECTION на типовом разделе магазина без проверки карточки товара и хлебных крошек.

Свяжите FILTER_NAME с catalog.smart.filter и свойствами товаров

FILTER_NAME - имя глобального PHP-массива с дополнительными условиями выборки. Компонент читает его так: если в параметрах указано 'FILTER_NAME' => 'arrFilter', то перед IncludeComponent объявляют global $arrFilter и заполняют ключи.

<?php
global $arrFilter;
$arrFilter = [
    'ACTIVE' => 'Y',
    '>CATALOG_PRICE_1' => 1000,
    'PROPERTY_COLOR' => 'red',
];

$APPLICATION->IncludeComponent(
    'bitrix:catalog.section',
    '.default',
    [
        'IBLOCK_ID' => 2,
        'SECTION_ID' => $sectionId,
        'FILTER_NAME' => 'arrFilter',
        'INCLUDE_SUBSECTIONS' => 'Y',
    ]
);
?>

У catalog.smart.filter и catalog.section должно быть одно имя FILTER_NAME. Иначе форма фильтра и список живут в разных массивах и фильтрация на фронте не работает. На практике типичная ошибка — пробел в 'arrFilter ': например, smart.filter пишет в arrFilter, а catalog.section ждёт другое имя.

Жёсткий SECTION_ID в arParams перебивает SECTION_ID в $arrFilter. Для выборки по нескольким разделам очистите SECTION_ID в параметрах и задайте $arrFilter['SECTION_ID'] = [12, 15, 18]. ЧПУ и SEO фильтра - в гайде по умному фильтру. Свойства для фильтрации - в настройке свойств товаров.

Делайте: объявляйте global $arrFilter до обоих компонентов - smart.filter и catalog.section. Не делайте: не дублируйте умный фильтр вторым экземпляром на той же странице с другим FILTER_NAME.

Проверьте кэш, ЧПУ и переход в catalog.element по чек-листу

После правок список может не меняться из-за кэша. При динамическом FILTER_NAME включите CACHE_FILTER = Y. На время отладки поставьте CACHE_TYPE = N и сбросьте кэш в админке.

Чек-лист "раздел пустой" - пройдите по порядку:

  1. Активность: товары и раздел активны, даты активности не в прошлом.
  2. IBLOCK_ID: в параметрах тот же инфоблок, что в админке.
  3. Вложенность: INCLUDE_SUBSECTIONS = Y, если товары только в подразделах.
  4. Конфликт SECTION_ID: параметр компонента не блокирует $arrFilter.
  5. FILTER_NAME: одно имя у фильтра и секции, без опечаток и пробелов.
  6. HIDE_NOT_AVAILABLE: при скрытии отсутствующих товаров проверьте остатки на складе.
  7. Кэш: сброшен после деплоя; на время диагностики отключите CACHE_TYPE.

Переход в карточку - через DETAIL_URL комплексного catalog. При 404 проверьте ЧПУ инфоблока и привязку элемента к разделу. Сообщения CATALOG_SECTION_NOT_FOUND и CATALOG_PRODUCT_NOT_FOUND указывают на неверный SECTION_CODE.

Делайте: верните CACHE_TYPE = A после отладки. Не делайте: не оставляйте print_r($arrFilter) на бою.

Что сделать после настройки catalog.section

Проверьте три раздела, пагинацию, умный фильтр и карточку товара. Если пустой раздел не диагностируется самостоятельно, напишите нам - разберём параметры и кэш.

Автор: Максим Мольков, разработчик 1С-Битрикс.
Источники: справка catalog.section, обзор компонентов каталога, практика внедрений на CMS 1С-Битрикс.

Частые вопросы

Чем catalog.section отличается от комплексного bitrix:catalog?

catalog.section - только список элементов раздела. Комплексный catalog связывает разделы, фильтр, список, корзину и карточку в одной цепочке ЧПУ. Для готового магазина стартуйте с catalog; catalog.section подключайте точечно в кастомных шаблонах и лендингах.

Как вывести элементы конкретного раздела инфоблока?

Передайте IBLOCK_ID и SECTION_ID или SECTION_CODE в IncludeComponent. В комплексном шаблоне берите значения из $arResult['VARIABLES']. Если товары во вложенных папках, добавьте INCLUDE_SUBSECTIONS = Y.

Зачем параметр FILTER_NAME в catalog.section?

FILTER_NAME связывает компонент с глобальным массивом PHP (обычно $arrFilter). Через него задают цену, свойства, несколько разделов и синхронизируют список с catalog.smart.filter. Имя должно совпадать у обоих компонентов без опечаток.

Почему не показываются товары из подразделов?

По умолчанию catalog.section смотрит только текущий раздел. Поставьте INCLUDE_SUBSECTIONS = Y. Если товары привязаны только к листовым категориям, родительский раздел без этого флага останется пустым.

Как связать список раздела с карточкой товара?

В комплексном catalog DETAIL_URL и шаблон ЧПУ инфоблока задают ссылку на catalog.element. Не включайте SHOW_ALL_WO_SECTION на обычной категории без проверки DETAIL_URL. После клика откройте карточку и убедитесь, что URL и хлебные крошки корректны.

Раздел пустой, хотя SECTION_ID верный - что проверить первым?

Сначала INCLUDE_SUBSECTIONS и активность товаров, затем конфликт SECTION_ID в параметрах с $arrFilter, потом FILTER_NAME и кэш. Временно отключите CACHE_TYPE и уберите лишние условия из $arrFilter - так быстрее найдёте, какое условие обнуляет выборку.

Читайте также

Интеграции с 1С и API
946 6 мин.

Как настроить регистрацию и личный кабинет покупателя на 1С-Битрикс?

Пошаговая настройка регистрации на сайте битрикс: Главный модуль, main.register, system.auth.form и sale.personal.section с историей заказов и 152-ФЗ.
Интеграции с 1С и API
675 15 мин.

Что такое компонент в Битриксе и как он работает

Каждый разработчик, впервые столкнувшийся с Битриксом, проходит через своеобразный обряд посвящения. Вначале кажется, что это просто CMS, где можно поправить HTML в визуальном редакторе или дописать пару строк CSS. Но однажды наступает момент, когда нужно изменить логику вывода новостей, отфильтровать товары по хитрому свойству или добавить на страницу нечто совершенно новое. И тут он впервые слышит это слово — «компонент». Для многих этот момент становится стеной. Система, казавшаяся понятной, вдруг превращается в черный ящик, полный непонятных файлов и странных переменных. Но стоит лишь раз заглянуть под капот, как эта стена рассыпается, превращаясь в набор удивительно логичных и мощных строительных блоков. Понимание компонентов — это тот самый щелчок, после которого разработка на Битрикс из мучения превращается в творчество.

Эта статья — ваш проводник в мир компонентов «1С-Битрикс». Мы не будем сыпать сухими терминами из документации. Вместо этого мы совершим путешествие: от философии, заложенной в эту архитектуру, до мельчайших деталей её работы. Мы разберем компонент на атомы — его файлы, логику, шаблон, параметры — и соберем обратно, чтобы вы не просто знали, что это, но и глубоко понимали, почему это работает именно так. Это знание — ключ к эффективной и профессиональной разработке на Битрикс.

Интеграции с 1С и API
605 2 мин.

Установка Composer в 1С-Битрикс

Установка Composer в проекте на 1С-Битрикс требует учета особенностей платформы, чтобы обеспечить корректную работу и интеграцию с системой.