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