Корзина — узел, где посетитель превращается в покупателя, и любой сбой тут стоит конверсии. В 1С-Битрикс за корзину отвечают два разных компонента: большая страница sale.basket.basket и малая корзина в шапке sale.basket.basket.line. Разберём, как их настроить, оформить и связать между собой.
Два компонента корзины: страница и «малая» в шапке
Штатно корзина в 1С-Битрикс делится на два независимых компонента модуля sale. Понимание, что за что отвечает, снимает половину вопросов при вёрстке.
sale.basket.basket— полноценная страница корзины (обычно/personal/cart/): таблица товаров, изменение количества, удаление, отложенные позиции, купоны и кнопка перехода к оформлению.sale.basket.basket.line— «малая корзина» в шапке: счётчик товаров и суммы, выпадающий список последних позиций, ссылка на страницу корзины и на личный кабинет.
Оба компонента читают одну и ту же корзину пользователя из таблицы b_sale_basket, поэтому изменения в одном мгновенно отражаются в другом. В комплексном решении «Аспро», «Крайт» или в «1С-Битрикс: Аспро Next» эти компоненты уже подключены в шаблоне header.php и странице корзины — вам остаётся донастройка, а не подключение с нуля.
sale.basket.basket.small ещё встречается в старых сборках, но для новых проектов используйте sale.basket.basket.line — он поддерживает ajax и корректно работает с текущим API корзины.Настройка колонок и отображаемых полей
Внешний вид таблицы корзины задаётся параметром COLUMNS_LIST в настройках компонента sale.basket.basket. Здесь вы выбираете, какие данные показывать в строке товара.
| Колонка | Что выводит |
|---|---|
NAME | Название товара со ссылкой на карточку |
PREVIEW_PICTURE | Картинку-превью позиции |
PROPS | Свойства торгового предложения (цвет, размер) |
PRICE / SUM | Цену за единицу и сумму по строке |
QUANTITY | Поле изменения количества |
DELETE / DELAY | Удаление и отложение «в избранное» |
Отдельно настраиваются блоки итогов: параметры PRICE_VAT_SHOW_VALUE (показывать НДС), HIDE_COUPON (поле промокода) и USE_PRICE_ANIMATION. Чтобы вывести свойство торгового предложения (например, размер) в отдельной колонке, добавьте его символьный код в список свойств в настройках и включите колонку PROPS.
Ajax-обновление без перезагрузки страницы
Современная корзина обязана менять количество и пересчитывать сумму без перезагрузки. За это отвечает параметр USE_DYNAMIC_SCROLL и, главное, режим ajax внутри компонента: при изменении QUANTITY строка пересчитывается запросом к basket.php, а не полной перезагрузкой.
Малая корзина в шапке обновляется через JS-событие OnBasketChange. Когда посетитель добавляет товар из каталога (компонент catalog.item с включённым USE_ENHANCED_ECOMMERCE), Битрикс дергает это событие, и sale.basket.basket.line перерисовывает счётчик. Ключевые параметры малой корзины:
SHOW_PRODUCTS— показывать список товаров в выпадашке;SHOW_TOTAL_PRICE— выводить общую сумму;SHOW_NUM_PRODUCTS— счётчик количества позиций;POSITION_FIXED— «прилипающая» корзина при прокрутке.
Быстрый заказ и переход к оформлению
Из корзины ведут два сценария: полное оформление и быстрый заказ. За кнопку перехода отвечает параметр DEFERRED_REFRESH и ссылка /personal/order/make/, где стоит компонент sale.order.ajax — одностраничное оформление.
Для ускорения можно встроить прямо в корзину оформление в один шаг. Технически это тот же sale.order.ajax с сокращённым набором свойств заказа, вызываемый в модальном окне поверх страницы корзины. Логика «купить в 1 клик» из карточки товара обычно кладёт позицию в корзину через Bitrix\Sale\Basket и сразу инициирует создание заказа с минимумом полей — телефон и имя.
Кросс-продажи и апселл в корзине
Корзина — правильное место для допродаж: клиент уже принял решение о покупке. В 1С-Битрикс блок сопутствующих товаров под таблицей корзины собирается компонентом sale.bestsellers или catalog.top, а также штатным механизмом «С этим товаром покупают».
- По статистике продаж —
sale.bestsellersвыводит хиты за период (BY_SUM,PERIOD); - Ручные связи — тип связи «Сопутствующие» в свойствах товара каталога;
- Аксессуары — через свойство типа «Привязка к элементам» и компонент
catalog.sectionс фильтром по ID.
Важный нюанс UX: кнопка «В корзину» у кросс-товара должна добавлять позицию через ajax и обновлять таблицу корзины на месте, не выбрасывая покупателя со страницы. Иначе апселл раздражает вместо того, чтобы поднимать средний чек.
Кастомизация шаблона корзины
Никогда не правьте файлы компонента в /bitrix/components/bitrix/sale.basket.basket/ — обновление платформы перезапишет изменения. Копируйте шаблон в свой шаблон сайта: /local/templates/site/components/bitrix/sale.basket.basket/.default/ и правьте там.
Логика раздачи данных в шаблон живёт в component_epilog.php и template.php, вёрстка строки товара — в bitrix/js/ и в шаблонизаторе. Для нестандартной логики (например, скрыть цену для незалогиненных B2B-клиентов) используйте:
result_modifier.php— постобработка$arResultперед выводом;- обработчик события
OnSaleBasketItemRefreshData— вмешательство в данные позиции; - класс
Bitrix\Sale\BasketиBasketItem— программная работа с составом корзины.
Такой подход держит кастомизацию отдельно от ядра и переживает обновления модуля sale.
Итог
Рабочая корзина в 1С-Битрикс — это связка двух компонентов: страницы sale.basket.basket с настроенными колонками и итогами и малой корзины sale.basket.basket.line в шапке, обновляемой по событию OnBasketChange. Добавьте ajax-пересчёт без перезагрузки, аккуратно вынесите персональный блок из композитного кэша, встройте быстрый заказ и блок кросс-продаж — и корзина начнёт работать на конверсию, а не против неё.
Если нужно собрать корзину под ваш дизайн, ускорить её на реальном трафике или связать заказы с учётной системой без потери данных, мы поможем: спроектируем и внедрим решение под ваш магазин на Битрикс.
Частые вопросы
Чем отличается sale.basket.basket от sale.basket.basket.line?
Первый — это полноценная страница корзины с таблицей товаров, количеством и переходом к оформлению. Второй — малая корзина в шапке сайта: счётчик, сумма и выпадающий список последних позиций.
Как убрать или добавить колонку в таблице корзины?
Отредактируйте параметр COLUMNS_LIST в настройках компонента sale.basket.basket. Там включаются и отключаются колонки NAME, PROPS, PRICE, QUANTITY, DELETE и другие.
Почему малая корзина показывает чужой счётчик товаров?
Скорее всего блок попал в статический композитный кэш. Персональная корзина должна отдаваться как динамическая область или через отложенную функцию, иначе разные пользователи видят один и тот же кэшированный результат.
Как сделать изменение количества без перезагрузки страницы?
Компонент корзины поддерживает ajax-режим: при смене QUANTITY строка пересчитывается запросом к basket.php. Убедитесь, что в шаблоне подключён штатный JS корзины и включён динамический пересчёт.
Можно ли оформить заказ прямо со страницы корзины?
Да, компонент sale.order.ajax можно вызвать в модальном окне поверх корзины с сокращённым набором свойств заказа. Это и есть быстрое одношаговое оформление.
Как добавить блок сопутствующих товаров под корзиной?
Используйте компонент sale.bestsellers для хитов продаж или ручные связи типа «Сопутствующие» в свойствах товара. Кнопка «В корзину» у кросс-товара должна работать через ajax.
Где правильно кастомизировать шаблон корзины?
Скопируйте шаблон в /local/templates/site/components/bitrix/sale.basket.basket/ и правьте копию. Файлы в /bitrix/components/ трогать нельзя — обновление платформы их перезапишет.
Как программно изменить состав корзины?
Работайте через классы Bitrix\Sale\Basket и BasketItem из модуля sale либо через обработчик события OnSaleBasketItemRefreshData. Это надёжнее прямого доступа к таблице b_sale_basket.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.