Назад

Битрикс – Как получить данные из Highload-блока

Главная
Блог
Битрикс – Как получить данные из Highload-блока

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

В этой статье разберем, как:

  1. Получить ID элемента из инфоблока.

  2. Найти связанную запись в Highload-блоке.

  3. Вывести нужные данные (например, название бренда).

1. Подготовка: подключаем модули

Для работы с Highload-блоками нужны два модуля:

  • iblock – для работы с элементами инфоблоков.

  • highloadblock – для доступа к Highload-блокам.

if (!CModule::IncludeModule('iblock') {
    throw new Exception('Модуль iblock не подключен');
}
if (!CModule::IncludeModule('highloadblock')) {
    throw new Exception('Модуль highloadblock не подключен');
}

2. Получаем данные элемента из инфоблока

Допустим, у нас есть товар ($product), и мы хотим узнать его бренд (значение свойства MANUFACTURER).

$productId = $product->getId();
$iBlockId = 8; // ID инфоблока с товарами
$manufacturerPropCode = 'MANUFACTURER'; // Символьный код свойства

// Запрашиваем элемент
$elementIterator = CIBlockElement::GetList(
    ["ID" => "ASC"],
    [
        "IBLOCK_ID" => $iBlockId,
        "ID" => $productId,
        "ACTIVE" => "Y", // Только активные
    ],
    false,
    false,
    ['ID', 'PROPERTY_' . $manufacturerPropCode]
);

if (!$element = $elementIterator->GetNext()) {
    throw new Exception('Товар не найден');
}

$brandId = $element['PROPERTY_' . $manufacturerPropCode . '_VALUE'];
if (!$brandId) {
    throw new Exception('Бренд не указан');
}

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

Теперь, зная $brandId, можно получить название бренда из Highload-блока.

$highloadBlockId = 4; // ID Highload-блока с брендами

// Получаем сущность Highload-блока
$hlblock = Bitrix\Highloadblock\HighloadBlockTable::getById($highloadBlockId)->fetch();
if (!$hlblock) {
    throw new Exception('Highload-блок не найден');
}

$entity = Bitrix\Highloadblock\HighloadBlockTable::compileEntity($hlblock);
$entityDataClass = $entity->getDataClass();

// Ищем бренд по ID
$brandData = $entityDataClass::getList([
    'select' => ['UF_NAME', 'UF_XML_ID'], // Выбираем нужные поля
    'filter' => ['ID' => $brandId],
    'limit' => 1,
])->fetch();

if (!$brandData) {
    throw new Exception('Бренд не найден в справочнике');
}

$brandName = $brandData['UF_NAME']; // Название бренда

4. Вывод результата

Теперь можно вывести название бренда:

echo htmlspecialcharsbx($brandName); // Экранируем вывод

5. Оптимизация и обработка ошибок

Кэширование запросов

Чтобы снизить нагрузку, можно кэшировать результат:

$cache = Bitrix\Main\Data\Cache::createInstance();
$cacheTime = 3600; // 1 час
$cacheId = 'brand_data_' . $brandId;
$cachePath = '/brands/';

if ($cache->initCache($cacheTime, $cacheId, $cachePath)) {
    $brandName = $cache->getVars()['brandName'];
} elseif ($cache->startDataCache()) {
    // Код получения данных из Highload-блока
    $cache->endDataCache(['brandName' => $brandName]);
}

Обработка ошибок

Лучше предусмотреть все возможные ошибки:

  • Элемент не найден.

  • Бренд не указан.

  • Highload-блок не существует.

Можно использовать try-catch или выводить значения по умолчанию:

try {
    // Код получения данных
} catch (Exception $e) {
    $brandName = 'Неизвестный бренд';
    AddMessage2Log($e->getMessage(), 'main', 0, false);
}

Заключение

Теперь вы знаете, как:

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