PHP
#bitrix#sale#order#basket#php#d7

Получить состав корзины заказа и вывести позиции

Получение позиций корзины заказа через Order->getBasket() с информацией о товарах, ценах и количестве.

Как использовать

  1. Скопируйте нужный фрагмент кода.
  2. Вставьте в свой проект и при необходимости измените под задачу.
  3. Проверьте зависимости и окружение (версии, переменные).

Получение состава корзины заказа с детальной информацией о позициях. Используйте в детальных страницах заказов, печатных формах, уведомлениях для отображения списка товаров.

use Bitrix\Main\Loader;
use Bitrix\Sale\Order;

/**
 * Получить позиции корзины заказа
 * @param int $orderId ID заказа
 * @return array Массив позиций корзины
 */
function getOrderBasketItems($orderId) {
    if (!Loader::includeModule('sale')) {
        return [];
    }
    
    $order = Order::load($orderId);
    if (!$order) {
        return [];
    }
    
    $basket = $order->getBasket();
    $items = [];
    
    foreach ($basket as $basketItem) {
        $item = [
            'ID' => $basketItem->getId(),
            'PRODUCT_ID' => $basketItem->getProductId(),
            'NAME' => $basketItem->getField('NAME'),
            'QUANTITY' => $basketItem->getQuantity(),
            'PRICE' => $basketItem->getPrice(),
            'CURRENCY' => $basketItem->getCurrency(),
            'SUM' => $basketItem->getFinalPrice(),
            'DISCOUNT_PRICE' => $basketItem->getDiscountPrice(),
            'VAT_RATE' => $basketItem->getVatRate(),
            'VAT_INCLUDED' => $basketItem->isVatIncluded() ? 'Y' : 'N',
            'PROPERTIES' => []
        ];
        
        // Получаем свойства позиции
        $propertyCollection = $basketItem->getPropertyCollection();
        foreach ($propertyCollection as $property) {
            $item['PROPERTIES'][] = [
                'CODE' => $property->getField('CODE'),
                'NAME' => $property->getField('NAME'),
                'VALUE' => $property->getField('VALUE')
            ];
        }
        
        $items[] = $item;
    }
    
    return $items;
}

/**
 * Получить общую информацию о корзине
 * @param int $orderId ID заказа
 * @return array ['items_count' => int, 'total_sum' => float, 'currency' => string]
 */
function getOrderBasketSummary($orderId) {
    if (!Loader::includeModule('sale')) {
        return ['items_count' => 0, 'total_sum' => 0, 'currency' => ''];
    }
    
    $order = Order::load($orderId);
    if (!$order) {
        return ['items_count' => 0, 'total_sum' => 0, 'currency' => ''];
    }
    
    $basket = $order->getBasket();
    
    return [
        'items_count' => $basket->count(),
        'total_sum' => $order->getPrice(),
        'currency' => $order->getCurrency()
    ];
}

Usage:

// Получить все позиции заказа
$items = getOrderBasketItems(12345);

foreach ($items as $item) {
    echo $item['NAME'] . ' - ' . $item['QUANTITY'] . ' шт.';
    echo 'Цена: ' . $item['PRICE'] . ' ' . $item['CURRENCY'];
    echo 'Сумма: ' . $item['SUM'] . ' ' . $item['CURRENCY'];
    
    // Вывести свойства (размер, цвет и т.д.)
    foreach ($item['PROPERTIES'] as $prop) {
        echo $prop['NAME'] . ': ' . $prop['VALUE'];
    }
}

// Получить общую информацию
$summary = getOrderBasketSummary(12345);
echo 'Товаров в заказе: ' . $summary['items_count'];
echo 'Общая сумма: ' . $summary['total_sum'] . ' ' . $summary['currency'];

Notes:

⚠️ getBasket() возвращает объект Basket с коллекцией позиций. getFinalPrice() возвращает цену с учётом скидок и НДС. Свойства позиции (размер, цвет и т.д.) доступны через getPropertyCollection(). Для получения информации о товаре используйте getProductId() и загружайте элемент инфоблока отдельно.