Настройка списка избранного 1С-Битрикс
Список избранного (избранные товары, закладки) — нет встроенного стандартного компонента в ядре Битрикс, который реализовал бы полноценный wishlist с хранением в базе данных. Функционал реализуется через механизм «Отложенных товаров» модуля sale либо через кастомную разработку с использованием UserFieldManager или отдельной таблицы.
Вариант 1: Отложенные товары (встроенный механизм)
Модуль sale имеет встроенный механизм «отложенных» позиций корзины. Товар добавляется в корзину с флагом DELAY = Y. Технически это строка в b_sale_basket с признаком отложенного:
// Добавить товар в отложенные
$basket = \Bitrix\Sale\Basket::loadItemsForFUser(
\Bitrix\Sale\Fuser::getId()
);
$item = $basket->createItem('catalog', $productId);
$item->setFields([
'QUANTITY' => 1,
'DELAY' => 'Y',
'NAME' => $productName,
'PRICE' => $price,
'CURRENCY' => 'RUB',
]);
$basket->save();
Компонент bitrix:sale.basket.basket выводит отложенные товары при параметре SHOW_DELAY = Y.
Минус: отложенные товары — часть корзины, а не отдельный список. При очистке корзины теряются.
Вариант 2: Кастомный список избранного
Для полноценного функционала: хранение между сессиями, синхронизация между устройствами, список независим от корзины — нужна отдельная таблица или использование пользовательских полей.
Структура таблицы user_favorite_products:
CREATE TABLE user_favorite_products (
ID SERIAL PRIMARY KEY,
USER_ID INT NOT NULL,
PRODUCT_ID INT NOT NULL,
DATE_ADD TIMESTAMP DEFAULT NOW(),
UNIQUE(USER_ID, PRODUCT_ID)
);
ORM-класс через DataManager позволяет работать с таблицей через стандартный Битрикс API. AJAX-эндпоинт для добавления/удаления — через \Bitrix\Main\Engine\Controller.
Для гостей: хранение в localStorage
Для незарегистрированных пользователей список избранного удобнее хранить в localStorage браузера. При авторизации — синхронизировать с базой через AJAX. Это стандартный подход для современных магазинов.
Компонент и UI
Кнопка «В избранное» размещается в шаблоне карточки товара и листинга. Состояние кнопки (добавлен/не добавлен) управляется JavaScript-классом на основе данных, переданных в компонент или полученных через AJAX.
Сроки выполнения
Избранное через механизм отложенных товаров — 2–4 часа. Полноценный кастомный список с синхронизацией гость/авторизованный — 1–2 рабочих дня.







