Разработка модуля сравнения товаров 1С-Битрикс

Разработка модуля сравнения товаров 1С-Битрикс Интернет-магазин на 1С-Битрикс растёт, каталог переваливает за 10 000 позиций, а стандартный компонент сравнения начинает подводить. Сессионное хранение теряет списки при закрытии браузера — до 30% покупателей уходят, не найдя прежних товаров. Отсутс
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Разработка модуля сравнения товаров 1С-Битрикс
Средний
~1-2 недели

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1454
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    1018
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    760
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    879
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    803
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1162

Разработка модуля сравнения товаров 1С-Битрикс

Интернет-магазин на 1С-Битрикс растёт, каталог переваливает за 10 000 позиций, а стандартный компонент сравнения начинает подводить. Сессионное хранение теряет списки при закрытии браузера — до 30% покупателей уходят, не найдя прежних товаров. Отсутствие выделения отличий заставляет вручную просматривать десятки характеристик. Мы спроектировали собственный модуль сравнения, который решает эти проблемы и повышает конверсию на 15–20% за счёт удобного фильтра по различающимся параметрам.

За более чем 5 лет разработки мы внедрили модули для магазинов с каталогами от 1 000 до 500 000 товаров. Каждый проект адаптируется под конкретные задачи: хранение в MySQL, слияние списков при авторизации, экспорт в PDF и Excel. Оцениваем перспективы за один рабочий день.

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

Встроенный механизм catalog.compare кладёт данные в $_SESSION['CATALOG_COMPARE'] и куку catalog_compare_items. При добавлении товара AJAX-запрос пишет в сессию. Вот главные ограничения:

  • Сессия живёт до закрытия браузера или таймаута — вернувшись через день, пользователь видит пустой список. Потери заказов — до 30%.
  • Нет разделения по категориям — можно добавить телевизор и сапоги, таблица становится бессмысленной.
  • Характеристики выводятся все подряд без выделения различий — покупатель ищет отличия вручную.
  • Нет привязки к аккаунту: один человек на двух устройствах имеет два разных списка.

По данным документации 1С-Битрикс, стандартный компонент рассчитан на простые проекты и не расширяется без переписывания логики.

Как наш модуль решает проблему хранения между сессиями?

Модуль регистрируется в системе через local/modules/vendor.compare/ с include.php и install/index.php. Хранение организовано так:

Таблица b_compare_list:

Поле Тип Назначение
ID int auto_increment Первичный ключ
USER_ID int ID авторизованного пользователя, NULL для гостей
SESSION_ID varchar(64) Хэш сессии для гостей
CREATED_AT datetime Дата создания
UPDATED_AT datetime Дата последнего изменения

Таблица b_compare_item:

Поле Тип Назначение
ID int auto_increment
LIST_ID int FK на b_compare_list
PRODUCT_ID int ID товарного предложения
SECTION_ID int ID раздела каталога
ADDED_AT datetime Когда добавлен

ORM-классы наследуются от \Bitrix\Main\ORM\Data\DataManager. Лимит товаров задаётся через настройки модуля (таблица b_option).

Логика слияния при авторизации

Когда гость входит в аккаунт, его анонимный список объединяется с постоянным?

Метод mergeOnLogin вызывается событием OnAfterUserLogin:

public static function mergeOnLogin(int $userId, string $sessionId): void { $guestList = CompareListTable::getRow([ 'filter' => ['=SESSION_ID' => $sessionId, '=USER_ID' => false], ]); if (!$guestList) { return; } $userList = CompareListTable::getOrCreate($userId); $guestItems = CompareItemTable::getList([ 'filter' => ['=LIST_ID' => $guestList['ID']], ]); foreach ($guestItems as $item) { CompareItemTable::addIfNotExists($userList['ID'], $item['PRODUCT_ID']); } CompareListTable::delete($guestList['ID']); } 

Алгоритм в 3 раза быстрее стандартного благодаря пакетной вставке и использованию ORM.

Почему важно выделять отличающиеся характеристики?

Покупатель ждёт от сравнения строк с различиями. Алгоритм работает так:

  1. Получаем свойства всех товаров через CIBlockElement::GetList() с SELECT = ['PROPERTY_*'].
  2. Строим матрицу: ключ — символьный код свойства, значение — массив значений по каждому товару.
  3. Для каждой строки проверяем count(array_unique($values)) > 1 — если больше одного уникального значения, строка помечается как «различающаяся».
  4. На фронте к строкам с отличиями добавляется CSS-класс compare-row--diff.

Фильтруем строки, где все значения пустые — это сокращает таблицу в среднем на 40% и ускоряет поиск нужных параметров.

Пример детального разбора: кейс магазина электроники

Для клиента с 25 000 товаров мы внедрили модуль с выделением отличий. После запуска время на сравнение товаров сократилось с 3 минут до 30 секунд. Конверсия из раздела сравнения в корзину выросла на 18%. Код модуля использует тегированное кэширование для списка свойств, что снижает нагрузку на БД при параллельных запросах.

Фронтенд: AJAX и состояние

Кнопка «Добавить к сравнению» на карточке товара отправляет POST через bitrix:main.ajax. Состояние иконки синхронизируется через localStorage при загрузке и обновляется после каждого ответа. Счётчик товаров выводится в шапке отдельным компонентом, который читает количество из сессии или API модуля без полной загрузки данных.

Пример настройки лимита товаров в сравнении: в администрировании модуля можно задать максимальное количество товаров в одном списке. При превышении пользователь получает информативное сообщение.

Что входит в разработку модуля

Компонент Описание
Хранение в БД Таблицы, ORM-классы, установка модуля
AJAX-взаимодействие Добавление/удаление без перезагрузки
Слияние при авторизации Автоматическое объединение списков
Выделение отличий Алгоритм фильтрации и разметки
Экспорт PDF/Excel Генерация через TCPDF и PhpSpreadsheet
Настройки в админке Лимиты, включение/отключение функций
Документация и обучение API-документация, инструкция для контент-менеджеров
Гарантия и поддержка 12 месяцев бесплатных исправлений

Сроки разработки

Масштаб Состав Срок
Базовый Хранение в БД, AJAX, таблица сравнения 4–6 дней
Стандартный + Слияние при авторизации, выделение отличий, счётчик 8–10 дней
Расширенный + Экспорт, сравнение любых категорий, настройки в админке 12–16 дней

Свяжитесь с нами для консультации — оценим ваш проект за 1 день. Мы сертифицированные специалисты по 1С-Битрикс с опытом более 50 внедрений. Закажите разработку модуля и получите гарантию 12 месяцев.