Михаил Базаров Разработка на 1С-Битрикс Михаил Базаров

Корзина и оформление заказа на одной странице, без правки ядра

Просмотров: 44 Задача: Объединить корзину и оформление заказа на одной странице, убрать лишние элементы (подарки, дублирующийся список товаров в оформлении), раскрыть все блоки оформления - и всё это без модификации стандартных компонентов Битрикс
Корзина и оформление заказа на одной странице, без правки ядра

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 с настроенными вызовами компонентов (также распаковать в корень сайта)

Архив не затрагивает никакие другие файлы сайта - только указанные шаблоны и одну страницу.

Важно: перед установкой сделайте резервную копию ваших текущих шаблонов. Если вы уже вносили изменения в эти шаблоны, рекомендую применять правки выборочно.

Услуги Стоимость разработки на 1С-Битрикс

Стоимость разработки сайта зависит от объёма и сложности проекта. Ниже приведены ориентировочные цены, как правило не выходят за обозначенные рамки. Срок разработки зависит от сложности проекта: как правило называю сроки с запасом.
Финальная стоимость и сроки разработки обговариваются на этапе обсуждения. Скачайте опросник на разработку, заполните как можно подробнее и вышлите удобным способом. После ознакомления смогу задать уточняющие вопросы и оценить проект.
Поддержка и доработки проектов
от 3 000 руб. от 1 часа

Выполнение доработок любой сложности. Поддержка, модернизация и расширение функционала существующих проектов. Решение задач: от мелких правок вёрстки до разработки новых модулей.

Подробнее
Сайт на готовом решении 1С-Битрикс
от 70 000 руб. от 5-ти дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Подробнее
Индивидуальная разработка магазина
от 300 000 руб. от 5-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Подробнее
Мобильное приложение
от 300 000 руб. от 4-х недель

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Подробнее
Инфоресурс
от 170 000 руб. от 3-х недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

Подробнее
Сайт компании
от 150 000 руб. от 2-х недель

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Подробнее

Включено в стоимость разработки:

  • Лицензия на 1С-Битрикс необходимой редакции, дополнительные модули, для реализации функционала и видео-инструкции по работе с готовым проектом
  • Оптимизация программной части проекта и конфигурации сервера под максимальную скорость работы. Базовая СЕО оптимизация и добавление сайта в поисковые системы.

Блог-note Заметки по 1С-Битрикс