При включении опции Учитывать количество одного и того же товара в модуле Покупай больше - плати меньше появляются ряд особенностей.
Главное - это при добавлении количества одного и того же товара, данный товар дублируется в корзине, т.е. создается новая аналогичная позиция, количество же каждого в итоге равно единице. Например, если вы добавили 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");
Приведенный код считывает изменения на странице корзины и обновляет ее повторно после выполнения всех расчетов.