1. Корзина + оформление на одной странице
На странице /personal/cart/ размещены два компонента:
bitrix:sale.basket.basketс шаблономbasket- корзина с возможностью редактирования количества, удаления товаров и применения купоновbitrix:sale.order.ajaxс шаблономorder- форма оформления заказа (контакты → доставка → оплата)
Интеграция между ними построена на скрытом параметре BASKET_WITH_ORDER_INTEGRATION. Когда он установлен в Y, компонент корзины не показывает свой блок итогов и кнопку «Оформить заказ» - эта функциональность делегируется компоненту оформления. Параметр обрабатывается в шаблоне корзины (template.php) без каких-либо изменений в классе компонента.
2. Параметр BASKET_WITH_ORDER_INTEGRATION в настройках
Изначально параметр отсутствовал в визуальном редакторе - его можно было задать только через код. Чтобы он не сбрасывался при редактировании страницы через интерфейс, я добавил его в .parameters.php шаблона корзины:
// local/templates/ВАШ_ШАБЛОН/components/bitrix/sale.basket.basket/basket/.parameters.php
$arTemplateParameters["BASKET_WITH_ORDER_INTEGRATION"] = array(
"PARENT" => "BASE",
"NAME" => GetMessage("SBB_PARAM_BASKET_WITH_ORDER_INTEGRATION"),
"TYPE" => "CHECKBOX",
"DEFAULT" => "Y",
"REFRESH" => "N",
);
Языковая фраза добавлена в lang/ru/.parameters.php. Сам компонент не модифицировался - параметр подхватывается на уровне шаблона сайта (local/templates/.../components/...), что является стандартным механизмом переопределения в Битрикс.
3. Удаление блока подарков из корзины
Из шаблона корзины полностью удалён код, отвечающий за подарки (USE_GIFTS):
- Из
template.phpубрана инициализация$giftParametersи вывод компонентаbitrix:sale.products.gift.basketв позициях TOP и BOTTOM - Из
lang/ru/template.phpиlang/en/template.phpудалена строкаSBB_GIFTS_BLOCK_TITLE - Из
style.cssудалён весь блок стилей подарков (регионыGiftsиGift-container, ~400 строк CSS)
4. Удаление списка товаров из оформления заказа
Поскольку корзина уже отображает список товаров, дублирующийся список в форме оформления не нужен:
- Из
template.phpудалены HTML-блоки корзины (BASKET ITEMS BLOCK для позицийbeforeиafter) и логика параметраBASKET_POSITION - Из
.parameters.phpудалены параметрыBASKET_POSITION,SHOW_BASKET_HEADERS,PRODUCT_COLUMNS_HIDDEN - Из вызова компонента на странице удалены
BASKET_POSITION,PRODUCT_COLUMNS_VISIBLE,PRODUCT_COLUMNS_HIDDEN - Из
style.cssудалены стили таблицы товаров, SCU-блоков и дополнительной информации (~260 строк CSS)
Для совместимости с JavaScript оставлен скрытый div#bx-soa-basket - JS-код компонента order_ajax.js проверяет наличие этого элемента, и без него возникает ошибка.
Все блоки оформления заказа развёрнуты
Эта доработка не связана напрямую с интеграцией корзины и оформления, но делает страницу удобнее. По умолчанию форма sale.order.ajax работает как пошаговый мастер: блоки «Регион», «Доставка», «Оплата», «Контактные данные» открываются последовательно, с кнопками «Назад»/«Далее». Я изменил это поведение - теперь все блоки видны сразу, без лишних кликов.
Изменения внесены в четыре функции order_ajax.js:
editSection- переменнаяactiveтеперь всегдаtrue, поэтому все секции рендерят полный контент, а не свёрнутый «fade»changeVisibleContent- все секции раскрываются, ссылки «Редактировать» скрываются, кнопка «Оформить заказ» всегда виднаchangeVisibleSection- контент всегда показываетсяgetBlockFooter- кнопки навигации «Назад»/«Далее» не отрисовываются
Из style.css также удалены стили кнопок .bx-soa-editstep, .bx-soa-more и анимации шагов.
Если пошаговый мастер вам нужен - просто не вносите эти правки в order_ajax.js и style.css.
Структура файлов
Все изменения - в шаблоне сайта ВАШ_ШАБЛОН. Ниже перечень модифицированных файлов (пути относительно local/templates/ВАШ_ШАБЛОН/components/bitrix/):
| Файл | Что изменено |
|---|---|
sale.basket.basket/basket/.parameters.php |
Добавлен параметр BASKET_WITH_ORDER_INTEGRATION |
sale.basket.basket/basket/lang/ru/.parameters.php |
Языковая фраза для нового параметра |
sale.basket.basket/basket/template.php |
Удалён блок подарков (GIFTS), логика интеграции с оформлением |
sale.basket.basket/basket/lang/ru/template.php |
Удалена строка SBB_GIFTS_BLOCK_TITLE |
sale.basket.basket/basket/lang/en/template.php |
Удалена строка SBB_GIFTS_BLOCK_TITLE |
sale.basket.basket/basket/style.css |
Удалены стили подарков (~400 строк) |
sale.order.ajax/order/template.php |
Удалены блоки корзины (BASKET ITEMS), логика BASKET_POSITION, добавлен скрытый div для JS-совместимости |
sale.order.ajax/order/.parameters.php |
Удалены параметры BASKET_POSITION, SHOW_BASKET_HEADERS, PRODUCT_COLUMNS_HIDDEN |
sale.order.ajax/order/order_ajax.js |
Функции editSection, changeVisibleContent, changeVisibleSection, getBlockFooter - все блоки всегда развёрнуты |
sale.order.ajax/order/style.css |
Удалены стили таблицы товаров, SCU, навигации, анимаций шагов (~350 строк) |
personal/cart/index.php |
Страница с компонентами корзины и оформления, очищена от неиспользуемых параметров |
Ключевые принципы
- Без модификации ядра - все правки в шаблоне сайта
local/templates/, ни один файл вbitrix/components/не тронут - Стандартный механизм переопределения - используется копирование шаблонов компонентов в шаблон сайта, как это предусмотрено архитектурой Битрикс
- Скрытый параметр
BASKET_WITH_ORDER_INTEGRATION- штатный механизм компонентаsale.basket.basket, который я просто сделал видимым в настройках - Чистка CSS - удалены все неиспользуемые селекторы, чтобы стили не конфликтовали и не замедляли загрузку
Архив с шаблонами
К заметке приложен архив с модифицированными шаблонами и страницей. В архиве две папки:
local/- шаблоны компонентов (распаковать в корень сайта, соответствует структуреlocal/templates/ВАШ_ШАБЛОН/components/bitrix/)personal/- страница/personal/cart/index.phpс настроенными вызовами компонентов (также распаковать в корень сайта)
Архив не затрагивает никакие другие файлы сайта - только указанные шаблоны и одну страницу.
Важно: перед установкой сделайте резервную копию ваших текущих шаблонов. Если вы уже вносили изменения в эти шаблоны, рекомендую применять правки выборочно.