4  /  4

Обновление корзины 1С-Битрикс методом Ajax

При включении опции Учитывать количество одного и того же товара в модуле Покупай больше - плати меньше появляются ряд особенностей.

Главное - это при добавлении количества одного и того же товара, данный товар дублируется в корзине, т.е. создается новая аналогичная позиция, количество же каждого в итоге равно единице. Например, если вы добавили 10 штук Товара 1, то в корзине появится 10 строчек этого же товара. У каждой этой позиции создается служебное свойство корзины с кодом scoder_buymore_property со случайным значением. Данное свойство не должно стать проблемой, т.к. можно скрыть его стилистически.

Внимание: В статье приведены фрагменты кода, описывающие принцип реализации, а не полностью рабочий продукт. В приведенном ниже коде пропущены необходимые для php конструкции, а перед html-тегами добавлен пробел, для того, чтобы код не воспринимался как исполнительный.

Для внедрения рекомендуется обратиться к разработчикам.

Большинство стандартных шаблонов корзины bitrix:sale.basket.basket, в том числе и шаблон корзины по умолчанию от 1С-Битрикс не учитывает автоматического добавления позиций в корзине, поэтому их нужно немного доработать. Для этого после модификаций в корзине, его нужно обновить с помощью Ajax.

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Корзина");
//ОПРЕДЕЛЯЕМ БЛОК КУДА БУДЕТ ВСТАВЛЯТЬСЯ КОД КОРЗИНЫ ПОСЛЕ AJAX ЗАПРОСА

< div id = "sc-cart">

   if (htmlspecialcharsEx($_REQUEST["SCODER_AJAX"] == "Y"))
      $GLOBALS['APPLICATION']->RestartBuffer();
	
   $APPLICATION->IncludeComponent(
      "bitrix:sale.basket.basket", 
      "", 
      array(
         "COUNT_DISCOUNT_4_ALL_QUANTITY" => "N",
         "COLUMNS_LIST" => array(
            0 => "NAME",
            1 => "DISCOUNT",
            2 => "PRICE",
            3 => "QUANTITY",
            4 => "SUM",
            5 => "PROPS",
            6 => "DELETE",
            7 => "DELAY",
         ),
         "AJAX_MODE" => "N",
         "AJAX_OPTION_JUMP" => "N",
         "AJAX_OPTION_STYLE" => "Y",
         "AJAX_OPTION_HISTORY" => "N",
         "PATH_TO_ORDER" => "/personal/order/make/",
         "HIDE_COUPON" => "N",
         "QUANTITY_FLOAT" => "N",
         "PRICE_VAT_SHOW_VALUE" => "Y",
         "TEMPLATE_THEME" => "site",
         "SET_TITLE" => "Y",
         "AJAX_OPTION_ADDITIONAL" => "",
         "OFFERS_PROPS" => array(
            0 => "SIZES_SHOES",
            1 => "SIZES_CLOTHES",
            2 => "COLOR_REF",
         ),
      ),
      false
   );
	
   if (htmlspecialcharsEx($_REQUEST["SCODER_AJAX"] == "Y"))
      die();
< /div>

CJSCore::Init(array("jquery","ajax"));      //ПОДКЛЮЧАЕМ JS БИБЛИОТЕКИ. ЕСЛИ ОНИ УЖЕ ПОДКЛЮЧЕНЫ В ШАБЛОНЕ САЙТА, ТО НЕТ НЕОБХОДИМОСТИ В ПОВТОРНОМ ПОДКЛЮЧЕНИИ

< script type="text/javascript">
   BX.ready(function(){
         BX.addCustomEvent('onAjaxSuccess', function(e,dd){
            if (dd.url == "/bitrix/components/bitrix/sale.basket.basket/ajax.php")
            {
               //определяем текучий адрес страницы
               var url = window.location.href.split('?')[0];
               BX.ajax({
                  url: url,
                  method: 'POST',
                  data: {'SCODER_AJAX':'Y'},
                  onsuccess: function(data){
                     $("#sc-cart").html(data);
                  },
               });
            }
         });
   });

< /script>

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");

Приведенный код считывает изменения на странице корзины и обновляет ее повторно после выполнения всех расчетов.

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