Вы открыли 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.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
Минимальный вызов в 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
);
?>
- Укажите IBLOCK_TYPE и IBLOCK_ID того каталога, где лежат товары - ID смотрите в админке "Контент - Инфоблоки".
- Передайте SECTION_ID или SECTION_CODE из $arResult['VARIABLES'] комплексного catalog - так ЧПУ раздела совпадёт с выборкой.
- Задайте PAGE_ELEMENT_COUNT и сортировку ELEMENT_SORT_FIELD / ELEMENT_SORT_ORDER под витрину.
- Включите DISPLAY_BOTTOM_PAGER, если товаров больше, чем помещается на одной странице.
- Сохраните шаблон и откройте раздел на фронте в режиме инкогнито.
- Сбросьте кэш компонента после первой правки параметров.
Делайте: в комплексном 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 => '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 и сбросьте кэш в админке.
Чек-лист "раздел пустой" - пройдите по порядку:
- Активность: товары и раздел активны, даты активности не в прошлом.
- IBLOCK_ID: в параметрах тот же инфоблок, что в админке.
- Вложенность: INCLUDE_SUBSECTIONS = Y, если товары только в подразделах.
- Конфликт SECTION_ID: параметр компонента не блокирует $arrFilter.
- FILTER_NAME: одно имя у фильтра и секции, без опечаток и пробелов.
- HIDE_NOT_AVAILABLE: при скрытии отсутствующих товаров проверьте остатки на складе.
- Кэш: сброшен после деплоя; на время диагностики отключите 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 - так быстрее найдёте, какое условие обнуляет выборку.