Битрикс: оформление заказа, упрощаем компонент sale.order.ajax
В битриксе есть компонент sale.order.ajax, который хорош, но в нём от покупателя просится ввести и способ доставки и оплаты и свои данные. Это удобно для интернет-магазинов крупных, но если у вас магазин больше ремесленый и ваши покупатели люди простые, то правильнее будет оставить только 3 поля (ФИО, телефон и email). Всё остальное будет узнавать перезванивающий клиенту менеджер.Итак, оформление заказа в Битрикс по-простому. Или кастомизация компонента sale.order.ajax. Вот прекрасная статья - https://www.olegpro.ru/post/1c_bitriks_kastomizaciya_novogo_shablona_komponenta_saleorderajax.html
Опишу свой процесс кастомизации (работе по подстраиванию стандартного компонента под себя как по функциональности, так и по оформлению)
Вот пока как выглядет моя форма кастомизированная из sale.order.ajax, дальше дорабатывать можно ещё проще.

1. Берём навороченный компонент sale.order.ajax (Одношаговое оформление заказа), в визуальном редакторе перетаскиваем его на страницу. Дважды кликаем по нему в области редактора. Копируем компонент в своё пространство шаблонов. Дальше можно какие-то настройки уже обозначить.
2. Теперь надо убирать лишние шаги и делать оформление по-своему. Все работы сведутся к расширению BX.Sale.OrderAjaxComponent (типа расширение такое). Создаём файл order_ajax_ext.js в папке с шаблоном компонента sale.order.ajax (там же, где лежит файл order_ajax.js). Вот моё содержимое order_ajax_ext.js
(function () {
'use strict';
var initParent = BX.Sale.OrderAjaxComponent.init,
getBlockFooterParent = BX.Sale.OrderAjaxComponent.getBlockFooter,
editOrderParent = BX.Sale.OrderAjaxComponent.editOrder
;
BX.namespace('BX.Sale.OrderAjaxComponentExt');
BX.Sale.OrderAjaxComponentExt = BX.Sale.OrderAjaxComponent;
BX.Sale.OrderAjaxComponentExt.init = function (parameters) {
initParent.apply(this, arguments);
var editSteps = this.orderBlockNode.querySelectorAll('.bx-soa-editstep'), i;
for (i in editSteps) {
if (editSteps.hasOwnProperty(i)) {
BX.remove(editSteps[i]);
}
}
$('#soa-property-3').mask('+7 (999) 999-99-99'); // вешаю маску на поле ввода телефона (3 поле по счёту)
};
BX.Sale.OrderAjaxComponentExt.getBlockFooter = function (node) {
var parentNodeSection = BX.findParent(node, {className: 'bx-soa-section'});
getBlockFooterParent.apply(this, arguments);
if (/bx-soa-auth|bx-soa-properties|bx-soa-basket/.test(parentNodeSection.id)) {
BX.remove(parentNodeSection.querySelector('.pull-left'));
BX.remove(parentNodeSection.querySelector('.pull-right'));
}
};
BX.Sale.OrderAjaxComponentExt.editOrder = function (section) {
editOrderParent.apply(this, arguments);
var sections = this.orderBlockNode.querySelectorAll('.bx-soa-section.bx-active'), i;
for (i in sections) {
if (sections.hasOwnProperty(i)) {
if (!(/bx-soa-auth|bx-soa-properties/.test(sections[i].id))) {
sections[i].classList.add('bx-soa-section-hide');
}
}
}
// дальше похожий код, но для сокрытия сайдбара с общей ценой
var sections2 = this.orderBlockNode.querySelectorAll('.bx-soa-sidebar'), i;
for (i in sections2) {
if (sections2.hasOwnProperty(i)) {
if (!(/bx-soa-cart-total/.test(sections2[i].id))) {
sections2[i].classList.add('bx-soa-section-hide');
}
}
}
this.show(BX('bx-soa-properties'));
this.editActiveBasketBlock(true);
this.alignBasketColumns();
if (!this.result.IS_AUTHORIZED) {
this.switchOrderSaveButtons(true);
}
};
BX.Sale.OrderAjaxComponentExt.initFirstSection = function (parameters) {
};
})();
3. Теперь этот расширенный файл js добавляем в шаблон. В этой же папке открывает template.php
После строчки:
$this->addExternalJs($templateFolder.'/order_ajax.js');
добавляем:
$this->addExternalJs($templateFolder.'/order_ajax_ext.js');
А так же в файле template.php меняем все вызовы BX.Sale.OrderAjaxComponent на BX.Sale.OrderAjaxComponentExt
4. И добавляем в наши стили класс
.bx-soa-section-hide { display: none; }
5. Далее только с помощью css я скрыл поле комментария к заказу, стилизовал кнопку "Оформить заказ" и навёл прочую красоту. Также скрыл сайдбар с дополнительной кнопкой оформления для случая узкого окна браузера (hidden-xs) - это в том же своём template.php
... <!-- DUPLICATE MOBILE ORDER SAVE BLOCK --> <div id="bx-soa-total-mobile" style="margin-bottom: 6px;" class="hidden-xs"></div> ...
Ещё по теме:
almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.
Вы можете почитать все статьи от almix'а.
- Битрикс: как добавить новые поля в почтовый шаблон (11.12.2017)
- Формы в Битриксе сделать в оформлении Bootstrap (07.12.2017)
- Артефакты при ресайзе библиотекой GD изображений с однородным (белым) фоном (07.12.2017)
- Owl Carousel 2 и Битрикс. Настройка слайдера (26.11.2017)
- Битрикс: проверка отправленных писем (26.11.2017)
- Битрикс: оформление заказа, упрощаем компонент sale.order.ajax (27.11.2017) ← вы тут
- Изменения в конфиге битрикса после переноса сайта. Подключение к БД (22.11.2017)
- Битрикс на поддомене. Неудобство с переменной DocumentRoot. Для хостинга Reg.ru (22.11.2017)
- Смена кодировки Битрикса с windows-1251 в UTF-8 (utf8) (01.12.2017)
- Битрикс: проверка на главной ли странице находимся (и другие проверки) (30.10.2017)
- Битрикс: правила обработки адресов и urlrewrite (30.10.2017)
- Как сделать разный title и H1 в Битриксе (30.10.2017)
- Почистить кеш Bitrix. Как удалить весь кеш в Битриксе? (20.06.2017)
- 1С-Битрикс: Карта сайта Google Sitemap в Битриксе (22.10.2011)
- 1С-Битрикс: Вывод свойства в детальный просмотр новости для полей типа HTML/текст (24.08.2011)
- Создание шаблона в 1С-Битрикс (23.10.2011)
- Разные шаблоны у главной и у внутренних страниц сайта на Битриксе (19.12.2011)
- Прототип шаблона дизайна сайта в 1С-Битрикс (23.10.2011)