Комплексный компонент bitrix:catalog — это ядро витрины интернет-магазина на 1С-Битрикс. Он объединяет раздел, детальную карточку, умный фильтр, сравнение и историю просмотренных в одном URL-пространстве. От того, как он настроен, зависят и скорость каталога, и корректность ЧПУ, и связь с торговыми предложениями.
Что делает комплексный компонент
Компонент bitrix:catalog — это не один шаблон, а комплекс: по одному физическому файлу index.php он маршрутизирует запросы на несколько внутренних компонентов в зависимости от URL. Внутри работают catalog.section (список товаров раздела), catalog.element (детальная карточка), catalog.sections.top (витрина), catalog.smart.filter (умный фильтр), catalog.compare и catalog.viewed.products.
Такая связка удобна тем, что все страницы каталога живут под одним разделом сайта, а переключение «список → карточка» происходит без ручной раскладки файлов по папкам. Ставится компонент обычно на страницу /catalog/index.php в визуальном редакторе или прямо в PHP через $APPLICATION->IncludeComponent().
- единая точка входа и единый набор параметров;
- согласованные между собой ЧПУ для раздела и элемента;
- общий кэш и общие настройки вывода свойств.
Привязка к инфоблоку и типу
Первое, что задаётся в параметрах, — тип инфоблока и сам инфоблок каталога (параметры IBLOCK_TYPE и IBLOCK_ID). Для интернет-магазина инфоблок должен быть подключён к торговому каталогу в разделе Магазин → Настройки → Торговый каталог, иначе не будут доступны цены, остатки и торговые предложения.
Важно не «зашивать» числовой IBLOCK_ID в код напрямую: при переносе на другой сервер или между dev и prod идентификаторы инфоблоков различаются. Надёжнее задавать инфоблок по символьному коду через выборку CIBlock::GetList() либо хранить ID в настройках модуля или в опциях.
ЧПУ и режим SEF
Комплексный компонент включает режим SEF (человекопонятные URL) параметром SEF_MODE = Y и базовым путём SEF_FOLDER, например /catalog/. В настройках задаётся набор шаблонов URL для внутренних страниц.
| Страница | Шаблон URL |
|---|---|
| Раздел | #SECTION_CODE_PATH#/ |
| Элемент | #SECTION_CODE_PATH#/#ELEMENT_CODE#/ |
| Умный фильтр | #SECTION_CODE_PATH#/filter/#SMART_FILTER_PATH#/apply/ |
| Сравнение | compare/ |
Чтобы ЧПУ раздела формировались корректно, у разделов и элементов инфоблока должны быть заполнены символьные коды (поле CODE). Автогенерацию транслитерации включают в настройках инфоблока на вкладке «SEO» / «ЧПУ». Для работы SEF в корне сайта нужен активный модуль человекопонятных URL и правило в urlrewrite.php.
Свойства, вывод и торговые предложения
Что показывать в списке и карточке, определяют группы параметров вывода свойств. В catalog.section и catalog.element это LIST_PROPERTY_CODE, PROPERTY_CODE и OFFERS_PROPERTY_CODE — коды свойств товара и предложений, которые нужно выбрать и отрисовать.
- Свойства товара — бренд, страна, характеристики; выводятся в карточке и часто в фильтре;
- Свойства предложений (
OFFERS_*) — цвет, размер; из них строится блок выбора SKU; - Поля цен —
PRICE_CODEзадаёт типы цен, которые видит покупатель, аUSE_PRICE_COUNTвключает диапазоны цен по количеству.
Отдельно настраивается корзина «в один клик»: параметры ADD_TO_BASKET_ACTION и USE_PRODUCT_QUANTITY отвечают за поведение кнопки покупки и ввод количества прямо в списке.
Умный фильтр и SEO-страницы фильтра
Фильтрацию обеспечивает отдельный компонент catalog.smart.filter, который выводится в левой колонке и связан с разделом через тот же IBLOCK_ID и SECTION_ID. Чтобы свойство участвовало в фильтре, у него в настройках инфоблока должен быть включён флаг «Показывать в умном фильтре» и выбран тип отображения (флажки, диапазон, выпадающий список).
Facet-индекс (индекс граней) резко ускоряет фильтр на больших каталогах — он пересчитывается в Магазин → Настройки → Умный фильтр или по событию изменения товара. Без индекса каждый запрос фильтра идёт прямыми выборками по таблицам свойств.
Для SEO-страниц вида /catalog/obuv/filter/brand-nike/apply/ нужен корректный шаблон SMART_FILTER_PATH и заполненные SEO-настройки правил фильтра, чтобы у таких URL были уникальные title и h1.
Кэширование и производительность
Каталог — самая нагруженная часть магазина, поэтому кэш обязателен. В параметрах включают CACHE_TYPE = A (авто) и разумный CACHE_TIME (например, 36000 секунд). Ключевой флаг — кэширование с учётом прав доступа (CACHE_GROUPS): если цены и доступность одинаковы для всех, его можно отключить (N) и получить один общий кэш вместо кэша на каждую группу.
- включите
AJAX_MODE = Yдля постраничной навигации без полной перезагрузки; - используйте композитный кэш для страниц раздела — статическая часть отдаётся мгновенно, а корзина и цены догружаются AJAX-ом;
- для карточки товара полезен
SET_LAST_MODIFIEDи корректные заголовки кэша браузера.
catalog.viewed.products) и мини-корзина работают через AJAX и намеренно выведены из общего кэша страницы — это и есть «динамические зоны» композита.Кастомизация шаблона и result_modifier
Стандартные шаблоны из bitrix/components/bitrix/catalog/ нельзя править напрямую — обновление платформы затрёт изменения. Копируйте шаблон в local/templates/<тема>/components/bitrix/catalog/<шаблон>/ и меняйте уже там.
Для дополнительной логики без переписывания template.php используйте файл result_modifier.php — он выполняется до шаблона и позволяет дополнить массив $arResult (например, подтянуть отзывы или пересчитать скидку). Тяжёлые вычисления лучше кэшировать через $this->__component->SetResultCacheKeys() и дополнительный кэш.
result_modifier.php— правка данных перед выводом;component_epilog.php— код, который должен работать вне кэша (счётчики, персонализация);- переопределение через
CBitrixComponent— только для нестандартной бизнес-логики.
Итог
Правильно настроенный bitrix:catalog — это связка из четырёх решений: корректная привязка к инфоблоку торгового каталога, аккуратные ЧПУ в режиме SEF, продуманный вывод свойств и предложений, и включённый кэш с facet-индексом фильтра. Ошибка в любом из них бьёт по скорости или по SEO.
Мы в B2Bsite проектируем витрины на 1С-Битрикс так, чтобы каталог быстро открывался и корректно обменивался данными с 1С, а фильтр и карточка выдерживали рост ассортимента. Если нужно ускорить существующий магазин или собрать каталог с нуля — поможем на всех этапах.
Частые вопросы
Чем комплексный компонент catalog отличается от отдельных catalog.section и catalog.element?
Комплексный компонент сам маршрутизирует запросы между внутренними компонентами по одному URL и файлу index.php. Отдельные компоненты вы раскладываете по страницам вручную, что гибче, но требует ручной настройки ЧПУ и связей.
Почему ЧПУ раздела и товара не формируются?
Чаще всего у разделов или элементов инфоблока не заполнено поле символьного кода CODE. Включите автотранслитерацию в настройках инфоблока и перегенерируйте коды для существующих записей.
Как выводить в карточке цвет и размер?
Каталог должен использовать торговые предложения (SKU), а в параметрах компонента нужно указать коды свойств предложений в OFFERS_PROPERTY_CODE. Тогда Битрикс сам построит блок выбора вариантов.
Свойство не появляется в умном фильтре, что проверить?
У свойства в настройках инфоблока должен быть включён флаг «Показывать в умном фильтре» и выбран тип отображения. После этого пересоберите индекс граней (facet) в настройках умного фильтра.
Стоит ли отключать кэширование с учётом прав доступа?
Если цены, доступность и видимость товаров одинаковы для всех групп пользователей, отключение CACHE_GROUPS даёт один общий кэш вместо множества и ускоряет каталог. При персональных ценах его оставляют включённым.
Как безопасно менять шаблон каталога?
Копируйте стандартный шаблон в local/templates и правьте копию, а данные дорабатывайте в result_modifier.php. Прямая правка файлов в bitrix/components будет затёрта при обновлении платформы.
Что даёт композитный кэш каталогу?
Статическая часть страницы отдаётся мгновенно из кэша, а динамические зоны — корзина, цены, просмотренные товары — догружаются через AJAX. Это заметно улучшает время первой отрисовки на страницах раздела.
Можно ли не зашивать IBLOCK_ID в параметры?
Да, лучше получать инфоблок по символьному коду через CIBlock::GetList или хранить ID в опциях модуля. Это избавляет от ручной правки параметров при переносе между dev и prod.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.