Блог Горошко Андрея 1C-Битрикс Свойство «Справочник» (Highload-блок): Как получить данные по UF_XML_ID

Свойство «Справочник» (Highload-блок): Как получить данные по UF_XML_ID

Свойство типа «Справочник» (directory) — это современный аналог списков.

Оно хранит данные в Highload-блоке, что позволяет добавлять к значениям картинки и дополнительные поля.

Проблема: При выборке элемента (CIBlockElement::GetList) в значении такого свойства приходит не ID записи и не Название, а строка UF_XML_ID (внешний код).

Как получить данные записи справочника?

Предположим, у нас есть свойство «Бренд» (код BRAND) типа «Справочник».

1. Получаем настройки свойства (чтобы узнать ID HL-блока)

// Получаем XML_ID из элемента
$xmlId = $arElement['PROPERTY_BRAND_VALUE']; // Например, "nike"

// Узнаем, в каком HL-блоке хранятся бренды
// Это можно посмотреть в админке или получить программно, если свойство универсальное
$hlblockId = 5; // ID Highload-блока "Brands"

2. Выбираем данные из HL-блока

Используем D7 ORM для выборки по UF_XML_ID.

use Bitrix\Highloadblock\HighloadBlockTable;
use Bitrix\Main\Loader;

Loader::includeModule("highloadblock");

// Компилируем сущность
$hlblock = HighloadBlockTable::getById($hlblockId)->fetch();
$entity = HighloadBlockTable::compileEntity($hlblock);
$entityDataClass = $entity->getDataClass();

// Делаем выборку
$result = $entityDataClass::getList([
    'select' => ['ID', 'UF_NAME', 'UF_FILE', 'UF_XML_ID'],
    'filter' => ['=UF_XML_ID' => $xmlId]
]);

if ($brand = $result->fetch()) {
    echo "Бренд: " . $brand['UF_NAME'];
    
    // Если есть картинка
    if ($brand['UF_FILE']) {
        echo '<img src="' . \CFile::GetPath($brand['UF_FILE']) . '">';
    }
}

Оптимизация для списка товаров

Если вы выводите список товаров, делать запрос в цикле для каждого товара — плохо (проблема N+1).

Правильный подход:

  1. Соберите все уникальные UF_XML_ID со всех товаров в массив $allXmlIds.
  2. Сделайте один запрос к HL-блоку с фильтром [‘=UF_XML_ID’ => $allXmlIds].
  3. Сохраните результат в массив с ключами по UF_XML_ID.
  4. При выводе товаров берите данные из этого массива.

Вывод:
Свойство «Справочник» связывает инфоблок и HL-блок через поле UF_XML_ID.

Для отображения данных (названия, иконки) необходимо выполнить дополнительный запрос к соответствующему Highload-блоку через D7 ORM.


 Свойство справочник, Directory, Highload-блок, UF_XML_ID, привязка к справочнику, Битрикс, получить изображение справочника.

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Добавить комментарий

Related Post

Событие при добавлении правила округления цен CATALOG.ROUNDING.ON.ADDСобытие при добавлении правила округления цен CATALOG.ROUNDING.ON.ADD

Оптимизация производительности и безопасности — залог успешного проекта на 1С-Битрикс. Данный материал посвящен практическому применению «Событие при добавлении правила округления цен CATALOG.ROUNDING.ON.ADD». Мы подготовили подробный разбор принципов работы и развернутые

Разработка мультиязычного интернет-магазина на 1С-БитриксРазработка мультиязычного интернет-магазина на 1С-Битрикс

Услуга «Разработка мультиязычного интернет-магазина на 1С-Битрикс» предназначена для компаний, стремящихся получить технологическое превосходство над конкурентами, ускорить работу сайта и обеспечить бесперебойную обработку тысяч заказов. поддержка нескольких языковых версий, мультивалютность с

Разработка интернет-магазина с модулем аренды и проката оборудованияРазработка интернет-магазина с модулем аренды и проката оборудования

Реализация проекта «Разработка интернет-магазина с модулем аренды и проката оборудования» направлена на создание технологического преимущества компании, масштабирование продаж и обеспечение бесперебойной работы под высокими нагрузками. календарь занятости оборудования, расчет залога,