При включении опции Дублировать товар в корзине при изменении его количества в модуле АРАМА: Покупай больше - плати меньше появляются ряд особенностей.
Главное — это при добавлении количества одного и того же товара, данный товар дублируется в корзине, т.е. создается новая аналогичная позиция, количество же каждого в итоге равно единице. Например, если вы добавили 10 штук Товара 1, то в корзине появится 10 строчек этого же товара. У каждой этой позиции создается служебное свойство корзины с кодом PRODUCT.DOUBLE_VALUE со случайным значением.
Внимание! В статье приведены фрагменты кода, описывающие принцип реализации, а не полностью рабочий продукт. Для внедрения рекомендуется обратиться к разработчикам.
Большинство стандартных шаблонов корзины bitrix:sale.basket.basket, в том числе и шаблон корзины по умолчанию от 1С-Битрикс не учитывает автоматического добавления позиций в корзине, поэтому их нужно немного доработать. Для этого, после модификаций в корзине, его нужно обновить с помощью ajax.
<script type="text/javascript">
BX.ready(function(){
BX.addCustomEvent('OnBasketChange', function(){
BX.Sale.BasketComponent.sendRequest('refreshAjax', {
fullRecalculation: 'Y',
otherParams: {
param: 'N'
}
});
});
});
</script>
Приведенный код считывает изменения на странице корзины и обновляет ее повторно после выполнения всех расчетов.
В старом режиме работы модуля [до версии 2.0] код будет более ёмкий.
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Корзина");
CJSCore::Init(array("jquery", "ajax")); //ПОДКЛЮЧАЕМ JS БИБЛИОТЕКИ. ЕСЛИ ОНИ УЖЕ ПОДКЛЮЧЕНЫ В ШАБЛОНЕ САЙТА, ТО НЕТ НЕОБХОДИМОСТИ В ПОВТОРНОМ ПОДКЛЮЧЕНИИ
$request = \Bitrix\Main\Application::getInstance()->getContext()->getRequest();
?>
<!--ОПРЕДЕЛЯЕМ БЛОК КУДА БУДЕТ ВСТАВЛЯТЬСЯ КОД КОРЗИНЫ ПОСЛЕ AJAX ЗАПРОСА-->
<div id = "sc-cart">
<?if ($request->get('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 ($request->get('SCODER_AJAX') == "Y"))
die();
?>
</div>
<script type="text/javascript">
BX.ready(function(){
BX.addCustomEvent('onAjaxSuccess', function(e, params){
if (params.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");?>
Триггеры, доступные в стандартных шаблонах компонента корзины bitrix:sale.basket.basket.
| Событие | Описание |
|---|---|
| OnBasketChange | событие, используемое для отслеживания изменений в корзине (добавление, удаление, изменение количества товаров) на стороне клиента (фронтенд). |
| OnCouponApply | событие, вызываемое в случае успешного добавления купона. |
| OnAjaxSuccess | событие в 1С-Битрикс, которое автоматически срабатывает при успешном завершении асинхронного (ajax) запроса через библиотеку BX.ajax. |
Внимание! Если вы хотите миновать промежуточный шаг с корзиной, а сразу использовать форму заказа с управляемым составом корзины, то рекомендуем рассмотреть модуль Шаблон формы заказа с управляемой корзиной. В этом шаблоне не нужно выполнять вышеуказанных манипуляций, т.к. он учитывает добавление товаров с помощью обработчиков событий.