Разработка компонента оформления заказа на 1С Битрикс
Мы предполагаем, что у вас уже есть компонент корзины, откуда мы и будет получать товары при оформлении заказа. Если функционал корзины у вас не реализован, то вы можете прочитать о нем на нашем сайте по ссылке
1. Создаем файл и помещаем туда компонент корзины
В нашем случае, оформление заказа и страница с корзиной – это одна и та же страница. Если они у вас расположены на разных страницах, логика действий от этого не меняется.
Все файлы по обработке заказа у нас лежат в папке cart в корне сайта. Там мы создаем файл index.php.

Затем добавляем туда компонент корзины для получения всех товаров в корзине и отображения их на странице. Компонента корзины называется sale.basket.basket. Естественно, нужно сохранить шаблон компонента. Почитать о нем подробнее можно в официальной документации bitrix.
2. Получаем товары корзины и помещаем их в форму
В шаблоне компонента нам нужно создать форму, action которой будет сохранять заказ. Соответственно в POST необходимо передать все товары корзины и свойства заказа. Обратите внимание, что мы можем создать свойства к заказу через административную панель битрикса, которые потом можем передать в форме заказа. То же самое касается видов доставки и плательщиков.
Все файлы по обработке заказа у нас лежат в папке cart в корне сайта. Там мы создаем файл index.php.


Обработчик формы у нас лежит в той же папке. Файл называется createOrder.php
action="/cart/createOrder.php" method="post"
Код файла достаточно большой, поэтому мы разместили его по ссылке. (Обратите внимание, что файл имеет расширение .txt. Вам нужно будет поменять расширение на .php)
Функционал изменения количества в компоненте корзины
Увеличение количества товара
AJAX
function incrementQuant(ID) {
$.ajax({
type: "POST",
url: "/cart/ajax_increment.php",
data: {
PRODUCT_ID: ID
},
success: function (msg) {
// alert(msg);
}
});
}
PHP
if (!CModule::IncludeModule("sale")) return;
if (isset($_POST['PRODUCT_ID'])) {
$PRODUCT_ID = intval($_POST['PRODUCT_ID']);
$quantity = CSaleBasket::GetByID($PRODUCT_ID)['QUANTITY'];
CSaleBasket::Update($PRODUCT_ID, array("QUANTITY" => $quantity + 1));
}
Уменьшение количества товара
AJAX
function decrementQuant(ID) {
$.ajax({
type: "POST",
url: "/cart/ajax_decrement.php",
data: {
PRODUCT_ID: ID
},
success: function (msg) {
// alert(msg);
}
});
}
PHP
if (!CModule::IncludeModule("sale")) return;
if (isset($_POST['PRODUCT_ID'])) {
$PRODUCT_ID = intval($_POST['PRODUCT_ID']);
$quantity = CSaleBasket::GetByID($_POST['PRODUCT_ID'])['QUANTITY'];
if ($quantity == 1) {
CSaleBasket::Update($PRODUCT_ID, array("QUANTITY" => 1));
} else {
CSaleBasket::Update($PRODUCT_ID, array("QUANTITY" => $quantity - 1));
}
}
Функционал удаления из корзины
AJAX
function removeFromBasket(ID) {
$.ajax({
type: "POST",
url: "/cart/ajax_delete.php",
data: {
PRODUCT_ID: ID
},
success: function (msg) {
// alert(msg);
},
complete: function () {
window.location.reload()
}
});
}
PHP
if (!CModule::IncludeModule("sale")) return;
if (isset($_POST['PRODUCT_ID'])) {
$PRODUCT_ID = intval($_POST['PRODUCT_ID']);
CSaleBasket::Delete($PRODUCT_ID);
// echo "Продукт удален";
}