Сравнение товаров — стандартный механизм каталога 1С-Битрикс, который позволяет покупателю поставить рядом несколько карточек и увидеть различия по характеристикам. Внешне это одна кнопка «Сравнить» и страница с таблицей, но за ней стоит связка из двух компонентов, хранилище в сессии и аккуратно подобранный набор полей. Разберём, из чего собран этот функционал и как настроить его под свой каталог.
Из чего состоит сравнение
За сравнение отвечают два разных компонента, и их важно не путать. Первый — bitrix:catalog.compare.list — это лёгкий «счётчик» вида «Сравнение (3)», который обычно ставят в шапку рядом с корзиной и избранным. Он показывает количество отобранных товаров и ссылку на страницу сравнения. Второй — bitrix:catalog.compare — рисует саму таблицу сравнения на отдельной странице.
Кнопки «Добавить к сравнению» живут не в этих компонентах, а в шаблонах карточки и списка каталога — bitrix:catalog.element и bitrix:catalog.section. В типовом решении «1С-Битрикс: Малый бизнес» и в редакции «Бизнес» всё это уже связано внутри комплексного компонента bitrix:catalog, где страница сравнения подключается файлом compare.php в шаблоне комплекса.
- catalog.compare.list — индикатор в шапке;
- catalog.compare — таблица на странице сравнения;
- кнопки добавления — в шаблонах
catalog.element/catalog.section.
Где хранится список сравнения
В отличие от корзины, список сравнения не пишется в базу и не привязан к пользователю — он живёт в сессии посетителя. Битрикс держит его в массиве вида $_SESSION["CATALOG_COMPARE_LIST"][IBLOCK_ID]["ITEMS"]. Отсюда два практических следствия: список пропадает при завершении сессии и не переносится между устройствами, а разделяется он по инфоблокам.
Ключ внутри хранилища задаёт параметр COMPARE_NAME. Если оставить его пустым, сравнение будет общим на весь инфоблок. Если подставить, например, код текущего раздела, у каждой категории получится свой независимый список — это удобно, когда сравнивать холодильники с ноутбуками бессмысленно.
catalog.compare.list подгружает актуальное число через отдельный механизм и не «замерзает» вместе со страницей.Как товар попадает в сравнение
Добавление и удаление реализованы через GET-параметры действия. Ссылка-кнопка формируется как ?action=ADD_TO_COMPARE_LIST&id=123, а удаление — как action=DELETE_FROM_COMPARE_LIST. Имена этих переменных настраиваются:
ACTION_VARIABLE— имя переменной действия (по умолчаниюaction);PRODUCT_ID_VARIABLE— имя переменной с ID товара (по умолчаниюid).
В современных шаблонах эти же значения обычно уходят не перезагрузкой страницы, а AJAX-запросом: клик по кнопке вызывает JS-обработчик (в eshop-шаблонах — функцию add2compare()), который дёргает тот же URL и обновляет счётчик без перехода. Важно, чтобы значения ACTION_VARIABLE и PRODUCT_ID_VARIABLE совпадали во всех компонентах связки — иначе кнопка добавит товар «не в тот» список, и счётчик в шапке останется нулём.
Какие характеристики попадают в таблицу
Строки таблицы сравнения — это поля и свойства товара, а колонки — сами товары. Набор строк задают два параметра компонента bitrix:catalog.compare:
FIELD_CODE[]— системные поля инфоблока (NAME,PREVIEW_TEXT,DETAIL_PICTUREи т. п.);PROPERTY_CODE[]— пользовательские свойства (диагональ, объём, вес, цвет).
Порядок кодов в этих массивах определяет порядок строк. Разумно выносить в сравнение именно те свойства, по которым покупатель принимает решение, а не весь список характеристик — длинная таблица теряет смысл. Отдельно стоит указать DETAIL_URL, чтобы название каждого товара в таблице вело в его карточку.
| Параметр | Назначение |
|---|---|
| FIELD_CODE | Системные поля-строки таблицы |
| PROPERTY_CODE | Свойства инфоблока в сравнении |
| COMPARE_NAME | Ключ списка в сессии |
| DETAIL_URL | Ссылка на карточку из таблицы |
Подсветка различий и вывод
Практическая ценность сравнения — быстро увидеть, чем товары отличаются. В шаблоне .default компонента bitrix:catalog.compare различающиеся строки помечаются отдельным классом, а строки с одинаковыми значениями можно скрыть переключателем «показывать только различия». Логика проста: если по свойству значения во всех колонках совпали — строка считается общей.
Чтобы подсветка работала корректно, свойства должны иметь сопоставимые типы и единицы. Строковое свойство «12 дюймов» и число «12» Битрикс сочтёт разными значениями, поэтому характеристики лучше вести справочниками (тип «Список» или привязка к highload-блоку) — тогда сравнение по значению будет точным, а не посимвольным.
Счётчик в шапке и страница сравнения
Компонент bitrix:catalog.compare.list ставится в шаблон сайта (обычно header.php) и требует минимум параметров: тип и ID инфоблока, NAME заголовка, те же ACTION_VARIABLE и PRODUCT_ID_VARIABLE, а также COMPARE_URL — путь к странице с таблицей. Его задача — показать число товаров и не более.
Саму страницу сравнения создают отдельной физической страницей (например /catalog/compare.php) с подключённым компонентом bitrix:catalog.compare, либо используют встроенную страницу комплексного компонента bitrix:catalog. Во втором случае большинство параметров компонент наследует у комплекса, что снижает риск рассинхронизации имён переменных.
- Подключить
catalog.compare.listв шапку; - Создать страницу сравнения с
catalog.compare; - Сверить
ACTION_VARIABLE,PRODUCT_ID_VARIABLE,IBLOCK_IDиCOMPARE_NAMEво всех местах; - Настроить
FIELD_CODEиPROPERTY_CODEпод нужные характеристики.
Итог
Сравнение товаров в 1С-Битрикс собирается из связки catalog.compare.list (счётчик в шапке) и catalog.compare (таблица), а кнопки добавления живут в шаблонах каталога. Список хранится в сессии и разделяется по инфоблокам и ключу COMPARE_NAME. Ключ к качественному сравнению — согласованные имена переменных во всех компонентах, аккуратный набор PROPERTY_CODE и свойства-справочники для точной подсветки различий.
Если нужно связать сравнение с остальным личным кабинетом, вынести характеристики в удобные справочники или ускорить каталог с включённым композитом — мы в B2Bsite настраиваем эту механику под конкретный магазин и следим, чтобы она не конфликтовала с кэшированием и обменом с 1С.
Частые вопросы
Каким компонентом выводится таблица сравнения?
Таблицу рисует компонент bitrix:catalog.compare. Счётчик «Сравнение (N)» в шапке — это отдельный компонент bitrix:catalog.compare.list.
Где Битрикс хранит список сравниваемых товаров?
В сессии посетителя, в массиве $_SESSION["CATALOG_COMPARE_LIST"] с разбивкой по инфоблокам. В базу данных и к профилю пользователя список не привязывается.
Сохранится ли сравнение после закрытия браузера?
Нет. Список живёт в рамках сессии, поэтому после её завершения он очищается и не переносится между устройствами.
Как задать, какие характеристики попадут в таблицу?
Через параметры FIELD_CODE (системные поля) и PROPERTY_CODE (свойства инфоблока) компонента catalog.compare. Порядок кодов задаёт порядок строк.
Можно ли сделать отдельное сравнение для каждой категории?
Да. Для этого в параметр COMPARE_NAME подставляют идентификатор раздела, и каждая категория получает независимый список в сессии.
Почему счётчик в шапке не увеличивается при клике?
Чаще всего не совпадают имена переменных ACTION_VARIABLE и PRODUCT_ID_VARIABLE либо IBLOCK_ID в компонентах добавления и в счётчике. Их нужно привести к одинаковым значениям.
Как работает режим «показать только различия»?
Шаблон компонента сравнивает значения по каждой строке во всех колонках. Если значения совпали, строка считается общей и может скрываться переключателем.
Почему одинаковые характеристики показываются как разные?
Обычно из-за свободного ввода значений: «12 дюймов» и «12» трактуются как разные строки. Ведите такие свойства списками или highload-справочниками для точного сравнения.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.