@Cyber-Pavel

Как сделать корзину товаров на сессиях для битрикс 1с?

Подскажите как сделать корзину на сессиях для битрикс 1с. Я хочу, чтобы при нажатие на кнопку у меня добавлялся товар в корзину без перегрузки страницы. Я сделал следующим образом: C помощью ajax-передаю post запросом передаю id элемента инфоблока:

function Buy(element_id) {
            const id = document.getElementById(element_id).value;
            var formData = new FormData();
            formData.append('id', id);
            var HttpRequest = new XMLHttpRequest();
            HttpRequest.onload = function(e) {
                if (this.status == 200) {}
            };
            HttpRequest.open("POST", '/personal/cart/', true);
            HttpRequest.send(formData);

        }

/personal/cart/

<?php
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php'); //Обязательная строка инициирующая движок Битрикса, но не подключающая шаблон
header('Content-Type: application/json');
session_start();
$id = $_POST['id'];
if (!empty($_SESSION['BX_CART'])) {
    $arChart = $_SESSION['BX_CART'];
} else {
    $arChart = array();
}
$arChart[$id]= [
    "id" => $id,
  
]; 
$_SESSION["BX_CART"]=$arChart;
foreach($_SESSION['BX_CART'] as $session){
    
    $arr[]=$session["id"];
    
}
\Bitrix\Main\Loader::includeModule('iblock');
$arSelect = Array("ID", "NAME", "DATE_ACTIVE_FROM");
$arFilter = Array("IBLOCK_ID"=>IntVal(8),"ID"=> $arr, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array(), $arSelect);
while($ob = $res->GetNextElement())
{
 $arField = $ob->GetFields();
 $arFields[]=$arField;
 
}
echo json_encode($arFields);

В этой части получаю массив из выбранных элементов из инфоблока.

//ЗДЕСЬ ПОЛУЧАЮ JSON

$.ajax({
        url: '/personal/cart/',
        method: 'get',
        //dataType: 'html',
        success: function (data) {
    
         const postData= data;
         
         function BlogPost(postData) {
  return `<div class="post">
            <h1>${postData.NAME}</h1>
            <h3>By ${postData.PRICE}</h3>
           
          </div>`;
}
function BlogPostList(posts) {
    
  return `<div class="blog-post-list">
            ${posts.map(BlogPost).join('')}
          </div>
      
          `
}
function update() {
  document.querySelector('.cont').innerHTML = BlogPostList(postData);
}
update();

        }
    });

Мне нужно,чтобы при нажатие на кнопку товар добавлялся сразу,но он добавляется только после перезагрузки.
  • Вопрос задан
  • 188 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы