Вывод краткой корзины в 1С-Битрикс (ссылка на корзину)

В 1С-Битрикс есть компонент краткой корзины товаров, под названием «ссылка на корзину». Он находится в визуальном редакторе в панели компонентов Магазин → Корзина → Ссылка на корзину.

Настроек у компонента не много и они все очевидны. Поставив на страницу этот компонент мы увидим

Стандартный компонент ссылка на корзину битрикса

Стандартный компонент ссылка на корзину 1С-Битрикс

Т.к. данная строка формируется внутри компонента, поменять ее не так просто. Скопируем шаблон компонента ссылка на корзину, создадим файл result_modifier.php, в нем добавим код

CModule::IncludeModule('sale');
CModule::IncludeModule('catalog');
$sum = 0;
$resBasket = CSaleBasket::GetList(
 array(),
 array(
 "FUSER_ID" => CSaleBasket::GetBasketUserID(),
 "LID" => SITE_ID
 )
);
while ($arBasketProd = $resBasket->GetNext()) {
 $sum += intVal($arBasketProd['PRICE']);
}
$sum = CurrencyFormat($sum, 'RUR');
$str = "<b>Корзина:</b> #NUM# товар#END# на сумму $sum";
$arResult['BASKET_TEXT'] = str_replace("#END#", BasketNumberWordEndings($arResult["NUM_PRODUCTS"]), str_replace("#NUM#", $arResult["NUM_PRODUCTS"], $str));

сначала мы подключаем необходимые модули

CModule::IncludeModule('sale');
CModule::IncludeModule('catalog');

затем получаем все товары из корзины с помощью

CSaleBasket::GetList

далее в цикле считаем сумму цен всех товаров

$sum += intVal($arBasketProd['PRICE']);

форматируем сумму, которая у нас получилось числом, в соответствии с форматом валюты (который настраивается в административной части «настройки → валюты → список валют» (возьмем для примера валюту RUR)

CurrencyFormat($sum, 'RUR')

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

Формируем свою строку для вывода и заносим в $arResult

$str = "<b>Корзина:</b> #NUM# товар#END# на сумму $sum";
$arResult['BASKET_TEXT'] = str_replace("#END#", BasketNumberWordEndings($arResult["NUM_PRODUCTS"]), str_replace("#NUM#", $arResult["NUM_PRODUCTS"], $str));

В результате получим

Переделанная ссылка на корзину Битрикс

Переделанная ссылка на корзину Битрикс

Похожие статьи

Статья оказалась полезной? Вырази благодарность - поделись в соцсетях

Отзывы : 10 комментариев

  1. Спасибо буду объязательно использовать у себя в проектах, иногда очень требуется вывести соседние элементы, а алгоритма проще Вашего не видел.

  2. Добрый день! Прошу прощения за ламерский вопрос. С битрикс недавно, можно сказать со вчера. Нужно создать тему для битрикса и вывести отдельно темизированную корзину. Подскажите пожалуйста как это можно сделать. Я так понял, что можно с помощью вашего примера, но не понял что, куда и откуда брать. Спасибо!

    • Попробуйте в том месте вашей темы, где вы хотите вывести корзину поставить компонент sale.basket.basket.line. Для этого вставьте следующий код

      < ?$APPLICATION->IncludeComponent("bitrix:sale.basket.basket.line","",Array(
      "PATH_TO_BASKET" => "/personal/basket.php",
      "PATH_TO_PERSONAL" => "/personal/",
      "SHOW_PERSONAL_LINK" => "Y"
      )
      );?>

      где
      PATH_TO_BASKET — путь до страницы, на которой установлен компонент корзины
      PATH_TO_PERSONAL — путь до страницы личного раздела
      SHOW_PERSONAL_LINK — показывать ссылку на персональный раздел или нет (варианты Y, N)

  3. Могли бы Вы подсказать по формату вывода валюты: в настройках у меня установлен формат вывода «12 000.00 руб.» (и я вижу такой формат при выводе цены товара).
    Но при выводе ссылки на корзину у меня получается «12,000.00» (т.е. запятая вместо пробела и отсутствует название валюты. Я пробовала также убирать строку $sum = CurrencyFormat($sum, ‘RUR’);
    но тогда выводится «12000»…

  4. Извинясь. 🙂 Используя Ваше решение я не обратила внимания, что у Вас выбрана валюта «RUR», у меня она называется «RUB». После исправления все заработала. Еще раз благодарю за хорошее решение!

  5. Здравствуйте! Обнаружена следующая проблема: если товар в корзине «Отложить», то в ссылке на корзину количество товаров уменьшается (что правильно), а сумма не пересчитывается. Т.е. если, например, отложить 1 товар, то мы увидим следующее: «0 товаров — 6 300.00 руб.» Пожалуйста, подскажите, как исправить? 🙂

    • Здравствуйте, шаблон компонента кастомизировали? Попробуйте сменить его на стандартный битриксовый, если проблема уйдет — то нужно смотреть ваш шаблон.

Комментирование отключено