Разработка компонента оформления заказа на 1С Битрикс

Мы предполагаем, что у вас уже есть компонент корзины, откуда мы и будет получать товары при оформлении заказа. Если функционал корзины у вас не реализован, то вы можете прочитать о нем на нашем сайте по ссылке

1. Создаем файл и помещаем туда компонент корзины

В нашем случае, оформление заказа и страница с корзиной – это одна и та же страница. Если они у вас расположены на разных страницах, логика действий от этого не меняется.

Все файлы по обработке заказа у нас лежат в папке cart в корне сайта. Там мы создаем файл index.php.

cart-files

Затем добавляем туда компонент корзины для получения всех товаров в корзине и отображения их на странице. Компонента корзины называется sale.basket.basket. Естественно, нужно сохранить шаблон компонента. Почитать о нем подробнее можно в официальной документации bitrix.

2. Получаем товары корзины и помещаем их в форму

В шаблоне компонента нам нужно создать форму, action которой будет сохранять заказ. Соответственно в POST необходимо передать все товары корзины и свойства заказа. Обратите внимание, что мы можем создать свойства к заказу через административную панель битрикса, которые потом можем передать в форме заказа. То же самое касается видов доставки и плательщиков.

Все файлы по обработке заказа у нас лежат в папке cart в корне сайта. Там мы создаем файл index.php.

cart-products properties

Обработчик формы у нас лежит в той же папке. Файл называется 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 "Продукт удален";
}