Назад

Выборка данных из Highload-блока в Битрикс по имени

Главная
Блог
Выборка данных из Highload-блока в Битрикс по имени

В Битрикс Highload-блоки позволяют хранить большие объемы структурированных данных. Часто требуется получить информацию из справочника, зная только название элемента (например, бренда или цвета). Рассмотрим, как это сделать эффективно.

1. Получение данных из Highload-блока по имени

Допустим, у нас есть два справочника:

  • Бренды (ID Highload-блока = 2)

  • Цвета (ID Highload-блока = 1)

Пример 1: Получение ID бренда по названию

if (CModule::IncludeModule('highloadblock')) {
    // Получаем данные бренда
    $arHLBlock = Bitrix\Highloadblock\HighloadBlockTable::getById(2)->fetch();
    $obEntity = Bitrix\Highloadblock\HighloadBlockTable::compileEntity($arHLBlock);
    $strEntityDataClass = $obEntity->getDataClass();
    
    $resData = $strEntityDataClass::getList([
        'select' => ['ID', 'UF_XML_ID'],
        'filter' => ['UF_NAME' => $brand], // $brand – название бренда
        'order'  => ['ID' => 'ASC'],
        'limit'  => 1,
    ]);
    
    if ($arItem = $resData->Fetch()) {
        $brandID = $arItem['UF_XML_ID'];
        echo $brandID;
    }
}

Пример 2: Получение XML_ID цветов по названиям (массив значений)

if (CModule::IncludeModule('highloadblock')) {
    // Получаем данные цветов
    $arHLBlock = Bitrix\Highloadblock\HighloadBlockTable::getById(1)->fetch();
    $obEntity = Bitrix\Highloadblock\HighloadBlockTable::compileEntity($arHLBlock);
    $strEntityDataClass = $obEntity->getDataClass();
    
    $resData = $strEntityDataClass::getList([
        'select' => ['ID', 'UF_NAME', 'UF_XML_ID'],
        'filter' => ['UF_NAME' => [$color, $next_color, $module]], // Фильтр по нескольким значениям
        'order'  => ['ID' => 'ASC'],
        'limit'  => 3,
    ]);
    
    while ($arItem = $resData->Fetch()) {
        if ($arItem['UF_NAME'] == $color) {
            $color_1 = $arItem['UF_XML_ID'];
        }
        if ($arItem['UF_NAME'] == $next_color) {
            $color_2 = $arItem['UF_XML_ID'];
        }
        if ($arItem['UF_NAME'] == $module) {
            $color_3 = $arItem['UF_XML_ID'];
        }
    }
}

2. Использование полученных данных

При создании или обновлении элемента можно использовать полученные UF_XML_ID:

$PROP['COLOR'] = $color_1;       // ID первого цвета
$PROP['NEXT_COLOR'] = $color_2;  // ID второго цвета
$PROP['MODULE'] = $color_3;      // ID третьего цвета

Вывод

Используя фильтрацию по полю UF_NAME, можно легко получать данные из Highload-блоков без дублирования кода. Этот подход особенно удобен при работе с большими справочниками.

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