В «Битриксе» есть небольшой компонент корзины «sale.basket.basket.line», все хорошо, но он по умолчанию считает кол-во наименований товаров в корзине, а не фактическое кол-во товаров. Почему разработчики Битрикса решили так считать товары для меня осталось загадкой. Ктому же компонент не считает общую стоимость заказа. Обычно такой расчет кол-ва товаров и отсутствия общей стоимости не устраивает заказчика и приходиться дорабатывать компонент корзины и считать фактическое кол-во товаров и общую стоимость.
Для того что бы посчитать «нормальное» кол-во товаров и стоимость добавим в компонент Битрикса «sale.basket.basket.line» скрипт «result_modifier.php» с таким вот кодом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
global $APPLICATION; if (!CModule::IncludeModule("sale")) { ShowError(GetMessage("SALE_MODULE_NOT_INSTALL")); return; } $cp = $this->__component; // объект компонента if (is_object($cp)) { // Получаем товары в корзине $dbBasketItems = CSaleBasket::GetList( array( "NAME" => "ASC", "ID" => "ASC" ), array( "FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, "ORDER_ID" => "NULL" ) ); $totalAmount = $count = 0; while($arItem = $dbBasketItems->GetNext()) { $count += $arItem["QUANTITY"]; // Цена уже пересчитана в валюту по умолчанию $totalAmount += $arItem["PRICE"] * $arItem["QUANTITY"]; $cp->arResult["ITEMS"][] = $arItem; } /* Далее используется не документированная функция CSaleLang */ $defaultCurr = CSaleLang::GetLangCurrency(SITE_ID); // Стоимость $cp->arResult['TOTAL_AMOUNT'] = SaleFormatCurrency($totalAmount, $defaultCurr); //Кол-во товаров $cp->arResult['PRODUCT_COUNT'] = $count; } |
Теперь в шаблоне компонента Bitrix есть возможность вывести значение кол-ва товаров и общую стоимость через ключи массива $arResult[‘PRODUCT_COUNT’] и $arResult[‘TOTAL_AMOUNT’] соответственно.