Дополнительный функционал добавления товара в корзину

Часто приходится сталкиваться с ситуацией, когда необходимо самостоятельно написать функционал добавления/удаления в корзину товара. В этой короткой статье и кейсе мы рассмотрим вариант, как это можно сделать.

Добавление товара в корзину. Как это работает

1. В данном случае мы предлагаем использовать jQuery, чтобы сам AJAX запрос был нагляднее. Чтобы подключить библиотеку jQuery, просто добавьте строчку, которая указана ниже, туда, где вы подключаете свои JS скрипты.

Asset::getInstance()->addJs("https://code.jquery.com/jquery-3.5.1.min.js");

2. Теперь напишем PHP код, который будет получать данные о товаре и добавлять его в текущую корзину на сайте

<? require_once ($_SERVER['DOCUMENT_ROOT']."/bitrix/modules/main/include.php");?>
<?
if (CModule::IncludeModule("sale") && CModule::IncludeModule("catalog"))
{
  if (isset($_POST['PRODUCT_ID'])&&isset($_POST['QUANTITY'])) {
    $PRODUCT_ID = intval($_POST['PRODUCT_ID']);
    $QUANTITY = intval($_POST['QUANTITY']);
    Add2BasketByProductID(
      $PRODUCT_ID,
      $QUANTITY,
      false
    );
  }
  else {
    echo "Нет параметров ";
  }
}
else {
  echo "Не подключены модули";
}
?>

При этом, мы получаем ID товара и его количество, а затем передаем во встроенную функцию Битрикса «Add2BasketByProductID».

Описание метода можно найти в самой официальной документации и мануалах к разработке CMS Битрикс на официальном сайте.

3. Добавим код AJAX, который будет отправлять $_POST по адресу со скриптом, который описан пунктом ранее.

function add2basket(ID) {
  $.ajax({
    type: "POST",
    url: "/local/php_interface/divier/add2basket__ajax.php",
    data: {
      PRODUCT_ID: ID,
      QUANTITY: getProdIDQuantity(ID),
    },
    success: function (msg) {
      // alert(msg);
    },
  });
}

Обратите внимание, если необходимо обновлять данные в корзине (в шапке сайта), то просто опишите эту логику в поле «success» на JavaScript.

4. Затем, на кнопку добавления в корзину необходимо «повесить» событие onclick, которое будет исполнять код AJAX. В нашем конкретном случае это выглядит вот так:

<button onclick="add2basket(ID)">В корзину<button>

5. Откуда взять ID? Ниже пример кода, где мы получаем ID товара

добавления/удаления товара в корзину

Удаление из корзины работает практически также.

Естественно, AJAX и PHP код будут отличаться.

PHP – код удаления из корзины

<? require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include.php"); ?>
<?
if (!CModule::IncludeModule("sale")) return;
if (isset($_POST['PRODUCT_ID'])) {
  $PRODUCT_ID = intval($_POST['PRODUCT_ID']);
  CSaleBasket::Delete($PRODUCT_ID);
// echo "Продукт удален";
}
?>

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()
    }
  });
}

Как видите, реализовать функционал добавления и удаления товаров из корзины совсем несложно.

Надеемся, эта статья помогла вам.