Назад

Как выгрузить каталог Битрикс в JSON

Главная
Блог
Как выгрузить каталог Битрикс в JSON

В этой статье разберём пример выгрузки товаров из каталога Битрикс в JSON. Рассмотрим ключевые моменты, возможные сложности и способы оптимизации.

Исходный код выгрузки

<?php  
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");  
CModule::IncludeModule("iblock");  
CModule::IncludeModule("catalog");  

header('Content-Type: application/json');  

$filePath = ($_SERVER['HTTPS']) ? 'https' : 'http';  
$IBLOCK_ID = 14;  
$userGroup = [2];  
$quantity = 1;  
$renewal = 'N';  
$arResult = [];  

// Получаем все разделы заранее для оптимизации  
$sections = [];  
$resSections = CIBlockSection::GetList(  
    [],  
    ['IBLOCK_ID' => $IBLOCK_ID],  
    false,  
    ['ID', 'NAME']  
);  
while ($section = $resSections->GetNext()) {  
    $sections[$section['ID']] = $section['NAME'];  
}  

// Получаем товары  
$res = CIBlockElement::GetList(  
    ["ID" => "ASC"],  
    ["IBLOCK_ID" => $IBLOCK_ID, "ACTIVE" => "Y"],  
    false,  
    false,  
    ['ID', 'NAME', 'DETAIL_PICTURE', 'PREVIEW_TEXT', 'DETAIL_TEXT', 'IBLOCK_SECTION_ID']  
);  

while ($arItem = $res->GetNext()) {  
    // Категория из предзагруженного массива  
    $category = $sections[$arItem['IBLOCK_SECTION_ID']] ?? '';  

    // Получаем цену  
    $productID = $arItem['ID'];  
    $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $userGroup, $renewal);  

    $item = [  
        'id' => $arItem['ID'],  
        'name' => trim($arItem['NAME']),  
        'jpg_url' => $filePath . '://' . $_SERVER['SERVER_NAME'] . CFile::GetPath($arItem['DETAIL_PICTURE']),  
        'description' => $arItem['DETAIL_TEXT'] ?: $arItem['PREVIEW_TEXT'],  
        'categories' => $category,  
        'categories_id' => $arItem['IBLOCK_SECTION_ID'],  
        'nominal' => $arPrice['RESULT_PRICE']['DISCOUNT_PRICE'],  
        'discount' => $arPrice['RESULT_PRICE']['DISCOUNT'],  
    ];  

    $arResult[] = $item;  
}  

echo json_encode($arResult, JSON_UNESCAPED_UNICODE);  

Ключевые моменты и оптимизация

Предварительная загрузка разделов
Вместо запроса CIBlockSection::GetByID на каждой итерации, мы один раз получаем все разделы и сохраняем в массив $sections. Это ускоряет работу скрипта.

Оптимальный расчёт цены
Используем CCatalogProduct::GetOptimalPrice, который автоматически учитывает скидки и типы цен.

Корректный Content-Type
Обязательно указываем header('Content-Type: application/json'), чтобы браузер правильно интерпретировал ответ.

Возможные улучшения

Добавление SKU (торговых предложений) – можно доработать выборку.
Кеширование результата – если каталог большой, лучше сохранять JSON в файл и обновлять по крону.
Пагинация – если товаров много, стоит добавить постраничную выгрузку.

Заключение

Этот код позволяет быстро выгрузить каталог Битрикс в JSON. Для больших магазинов важно оптимизировать запросы и минимизировать нагрузку на сервер.

Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Читайте по теме
Все статьи
Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Все статьи