Розробка модуля порівняння товарів 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
    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 місяців.