Получение информации о торговых предложениях по ID товара 1С-Битрикс с помощью API. Разбор кода

В веб-разработке на платформе 1С-Битрикс нередко возникает необходимость работы с товарными предложениями, ценами и остатками товаров в интернет-магазине. С помощью стандартных инструментов платформы можно эффективно и быстро получить необходимые данные. В данной статье рассмотрим пример PHP-скрипта, который позволяет получить информацию о торговых предложениях товара, его цене и остатках на складе.

Получение информации о торговых предложениях по ID товара

Полный код:


 $arInfo['IBLOCK_ID'], 'PROPERTY_' . $arInfo['SKU_PROPERTY_ID'] => $ID, "ACTIVE" => "Y"),
            false,
            false,
            array("ID", "NAME") // Получаем только ID и NAME
        );

        while ($arOffer = $rsOffers->GetNext()) {
            // Получаем цену
            $priceData = PriceTable::getList(array(
                'filter' => array('PRODUCT_ID' => $arOffer['ID']),
                'select' => array('PRICE')
            ))->fetch();

            $arOffer['PRICE'] = $priceData ? $priceData['PRICE'] : 0;

            // Получаем остатки для конкретного торгового предложения
            $storeData = StoreProductTable::getList(array(
                'filter' => array('PRODUCT_ID' => $arOffer['ID']),
                'select' => array('AMOUNT')
            ))->fetch();

            // Если данные о остатках найдены, записываем их, иначе 0
            $arOffer['QUANTITY'] = $storeData ? $storeData['AMOUNT'] : 0;

            // Добавляем информацию в результат
            $result[] = array(
                'ID' => $arOffer['ID'],
                'NAME' => $arOffer['NAME'],
                'PRICE' => $arOffer['PRICE'],
                'QUANTITY' => $arOffer['QUANTITY']
            );
        }
    } else {
        $result['error'] = "Не удалось получить информацию о товаре.";
    }
} else {
    $result['error'] = "Не удалось загрузить модуль каталога.";
}

header('Content-Type: application/json');
echo json_encode($result);
?>
    

Разбор кода:

  1. Инициализация и подключение модуля: В начале кода подключается важный файл prolog_before.php, который необходим для работы в контексте платформы 1С-Битрикс. Этот файл инициализирует рабочую среду Битрикс и делает доступными все функции и классы, необходимые для работы с платформой.
    
    require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
                
    Далее, через use, подключаются нужные классы:
    • Bitrix\Main\Loader — для загрузки модулей.
    • Bitrix\Catalog\PriceTable — для работы с ценами товаров.
    • Bitrix\Catalog\StoreProductTable — для работы с остатками товаров на складах.
  2. Подключение модуля каталога: В блоке if (Loader::includeModule("catalog")) проверяется, подключен ли модуль каталога. Если модуль не подключен, будет возвращена ошибка.
    
    if (Loader::includeModule("catalog")) {
                
  3. Получение информации о товаре и торговых предложениях: Переменные $IBLOCK_ID и $ID содержат идентификатор инфоблока и ID товара, по которому нужно получить информацию. Функция CCatalogSKU::GetInfoByProductIBlock() получает информацию о торговых предложениях для заданного инфоблока. Важно, что товар может иметь несколько предложений с различными характеристиками.
    
    $arInfo = CCatalogSKU::GetInfoByProductIBlock($IBLOCK_ID);
                
  4. Получение торговых предложений: Функция CIBlockElement::GetList() выполняет запрос для получения торговых предложений товара по его ID. В цикле while обрабатываются все торговые предложения, и для каждого предложения извлекаются его ID и название.
    
    $rsOffers = CIBlockElement::GetList(
        array(),
        array('IBLOCK_ID' => $arInfo['IBLOCK_ID'], 'PROPERTY_' . $arInfo['SKU_PROPERTY_ID'] => $ID, "ACTIVE" => "Y"),
        false,
        false,
        array("ID", "NAME")
    );
                
  5. Получение цен для каждого предложения: Для каждого торгового предложения выполняется запрос к таблице PriceTable, где извлекается информация о цене товара.
    
    $priceData = PriceTable::getList(array(
        'filter' => array('PRODUCT_ID' => $arOffer['ID']),
        'select' => array('PRICE')
    ))->fetch();
                
  6. Получение остатков для каждого торгового предложения: Далее, с помощью StoreProductTable::getList() извлекаются данные о количестве товара на складах.
    
    $storeData = StoreProductTable::getList(array(
        'filter' => array('PRODUCT_ID' => $arOffer['ID']),
        'select' => array('AMOUNT')
    ))->fetch();
                
  7. Формирование результата: В конце каждого цикла информация о каждом предложении (ID, название, цена и остатки) добавляется в массив $result. Если какой-либо из параметров не найден, например, цена или остатки, то в массив добавляется значение по умолчанию.
    
    $result[] = array(
        'ID' => $arOffer['ID'],
        'NAME' => $arOffer['NAME'],
        'PRICE' => $arOffer['PRICE'],
        'QUANTITY' => $arOffer['QUANTITY']
    );
                
  8. Вывод результата в формате JSON: В конце скрипта результат отправляется в формате JSON, что удобно для использования на клиентской стороне (например, для отображения информации через JavaScript).
    
    header('Content-Type: application/json');
    echo json_encode($result);
                
Теги:  рецепты, разбор кода

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Техническая поддержка

выполняется с сайтами на основе любых CMS

от 5 000 рублей
Оптимизация производительности действующих интернет-проектов, наполнение и сопровождение, полная техническая поддержка и продвижение в поисковых сетях.

* стоимость зависит от объема и сложности выполняемых работ, используемой CMS.

Лечение сайтов от вирусов

восстановление сайта и подъем версии PHP

от 25 000 рублей
Лечение сайтов на решениях АСПРО и прочих.

* полный комплекс лечения проекта и закрытия дыр

Аутсорсинг

готов помочь, если нет времени

договорная

Могу взять на себя работы по full-stack на основе готовой верстки

* если нет верстки, то возможность верстать с Figma в режиме редактора