Чому потрібен кастомний конструктор наборів?
Покупець хоче зібрати подарунковий кошик із 5 позицій на вибір. Або скомплектувати комп'ютер із сумісних комплектуючих. Або вибрати шини + диски + TPMS як одне замовлення. Жоден із стандартних компонентів Бітрікс — ні bitrix:catalog.element, ні торгові пропозиції — не вирішує це завдання. Потрібен кастомний конструктор наборів. Типовий кейс — інтернет-магазин подарунків: клієнт збирає кошик із 5 товарів із 20, середній чек зростає на 30% і конверсія збільшується на 15%. Або конструктор ПК із перевіркою сумісності модулів RAM, процесорів і відеокарт. Ми розробляємо такі кастомні рішення під ключ вже 10+ років. Гарантуємо стабільну роботу та масштабованість. Отримайте консультацію інженера — ми оцінимо ваш проєкт.
Відмінність конструктора від торгових пропозицій
Торгові пропозиції (SKU) в Бітрікс — це варіації одного товару: розмір, колір. Конструктор наборів — це комбінація різних товарів із різних категорій, зібрана в одне замовлення із загальною ціною. Іноді з фіксованою кількістю позицій на кожну «комірку», іноді з довільним вибором. Приклади: подарунковий набір (вибери 3 товари зі списку 20), конструктор ПК (вибери процесор + материнську плату + RAM із перевіркою сумісності), комбо-набір (бургер + напій + гарнір).
Структура даних конструктора
Набір — окрема сутність. Варіант реалізації — інфоблок «Набори» з прив'язкою до товарів каталогу. Інфоблок наборів (IBLOCK_SETS) містить поля: SET_NAME, SET_DESCRIPTION, SLOTS (JSON з описом комірок), DISCOUNT_TYPE і DISCOUNT_VALUE. Структура слота в JSON:
{ "slot_id": 1, "name": "Основна страва", "required": true, "min_qty": 1, "max_qty": 1, "product_filter": { "IBLOCK_ID": 5, "SECTION_ID": [12, 13] } } Для складних проєктів (конструктор ПК) краще зберігати слоти в окремій кастомній таблиці. Створюються дві таблиці: b_set_slots (ID, SET_ID, SLOT_NAME, REQUIRED, MIN_QTY, MAX_QTY, SORT) і b_set_slot_products (SLOT_ID, PRODUCT_ID).
CREATE TABLE b_set_slots ( ID SERIAL PRIMARY KEY, SET_ID INT NOT NULL REFERENCES b_iblock_element(ID), SLOT_NAME VARCHAR(255), REQUIRED BOOLEAN DEFAULT TRUE, MIN_QTY INT DEFAULT 1, MAX_QTY INT DEFAULT 1, SORT INT DEFAULT 100 ); CREATE TABLE b_set_slot_products ( SLOT_ID INT NOT NULL REFERENCES b_set_slots(ID), PRODUCT_ID INT NOT NULL REFERENCES b_iblock_element(ID), PRIMARY KEY (SLOT_ID, PRODUCT_ID) ); Як розрахувати та додати набір у кошик?
Інтерфейс конструктора — послідовні кроки або єдина сторінка з вертикальними групами. На кожному кроці — список товарів для даного слота. Розрахунок підсумкової ціни відбувається на клієнті (швидко, без сервера) і підтверджується на сервері при додаванні в кошик. Приклад розрахунку на JavaScript:
function calcSetTotal(selectedProducts) { let total = selectedProducts.reduce((sum, p) => sum + p.price * p.qty, 0); if (setDiscount.type === 'percent') { total = total * (1 - setDiscount.value / 100); } else { total = total - setDiscount.value; } return Math.max(0, total); } Додавання в кошик вимагає кастомної логіки, оскільки стандартний API не вміє зв'язувати позиції. Ось покрокова інструкція:
- Отримайте об'єкт кошика поточного користувача через
Basket::loadItemsForFUser(). - Згенеруйте унікальний код набору (
set_+ uniqid). - Для кожного вибраного товару створіть елемент кошика та встановіть властивість
SET_CODE. - Збережіть кошик.
Приклад на PHP:
use Bitrix\Sale\Basket; use Bitrix\Sale\BasketItem; $basket = Basket::loadItemsForFUser(CSaleBasket::GetBasketUserID(), SITE_ID); $setBasketCode = 'set_' . uniqid(); foreach ($selectedProducts as $product) { $item = $basket->createItem('catalog', $product['PRODUCT_ID']); $item->setFields([ 'QUANTITY' => $product['QTY'], 'PRODUCT_PRICE_ID' => $product['PRICE_ID'], 'CUSTOM_PRICE' => 'Y', 'PRICE' => $product['PRICE'], 'PROPS' => [['NAME' => 'SET_CODE', 'VALUE' => $setBasketCode]], ]); } $basket->save(); Як працює перевірка сумісності?
Для конструкторів технічних виробів (ПК, автозапчастини, меблі) потрібна матриця сумісності. Створюється таблиця b_compatibility_rules із полями ID, PRODUCT_A_ID, PRODUCT_B_ID, COMPATIBLE, REASON. При виборі товару AJAX-запит до PHP-контролера перевіряє, чи є правило несумісності з уже вибраними позиціями, і блокує їх в UI. Приклад таблиці та контролера:
CREATE TABLE b_compatibility_rules ( ID SERIAL PRIMARY KEY, PRODUCT_A_ID INT NOT NULL, PRODUCT_B_ID INT NOT NULL, COMPATIBLE BOOLEAN DEFAULT TRUE, REASON TEXT ); public function checkCompatibilityAction(int $productId, array $selectedIds): array { $incompatible = []; foreach ($selectedIds as $id) { $rule = CompatibilityTable::getRow([ 'filter' => [ ['PRODUCT_A_ID' => $productId, 'PRODUCT_B_ID' => $id], ['COMPATIBLE' => false], ] ]); if ($rule) { $incompatible[] = ['product_id' => $id, 'reason' => $rule['REASON']]; } } return $incompatible; } Збережені конфігурації
Користувач може зберегти зібраний набір і повернутися до нього. Для цього створюється таблиця b_user_set_configs (USER_ID, SET_ID, CONFIG_NAME, PRODUCTS JSONB, DATE_CREATE). Користувач бачить свої конфігурації в особистому кабінеті і може додати будь-яку в кошик одним кліком.
Що входить у роботу?
- Аудит поточного каталогу та бізнес-вимог.
- Проектування структури даних (інфоблоки, MySQL-таблиці, ORM).
- Розробка UI вибору товарів (адаптивний, з фільтрами та перевірками).
- Кастомізація кошика для групування позицій набору.
- Інтеграція знижок набору (відсоткові або фіксовані).
- Тестування на 50+ сценаріях.
- Документація та навчання менеджерів.
- Підтримка 1 місяць після запуску.
Всі рішення базуються на офіційній документації 1С-Бітрікс: ORM 1С-Бітрікс.
Терміни розробки
| Тип конструктора | Що входить | Термін |
|---|---|---|
| Подарунковий набір (простий вибір) | UI + кошик + знижка набору | 2–3 тижні |
| Комбо з групами (фаст-фуд стиль) | + групи слотів, обов'язкові позиції | 3–5 тижнів |
| Конструктор із сумісністю | + матриця сумісності, перевірки | 5–8 тижнів |
| + Збережені конфігурації | + ОК, історія, шеринг конфігурації | +2–3 тижні |
Порівняння підходів: стандартний vs кастомний
| Критерій | Торгові пропозиції (SKU) | Кастомний конструктор |
|---|---|---|
| Комбінація різних товарів | Ні (варіації одного) | Так (довільні категорії) |
| Перевірка сумісності | Ні | Так (матриця правил) |
| Знижка на набір | Тільки на рівні товару | Так (відсоток/фікс) |
| Збереження конфігурації | Ні | Так (в БД) |
| Складність реалізації | Низька | Середня-висока |
Конструктор наборів збільшує середній чек на 20-40%: користувач, який збирає комплект, витрачає більше. Інструмент працює тим краще, чим простіший інтерфейс вибору. Окупність вкладень — 3-4 місяці. Замовте розробку конструктора для вашого магазину — ми підготуємо індивідуальний план.







