Блог Горошко Андрея 1C-Битрикс Пользовательские поля (UF): Как получать и обновлять их в GetList и D7 ORM*

Пользовательские поля (UF): Как получать и обновлять их в GetList и D7 ORM*

Пользовательские поля (User Fields, UF-поля) — это стандартный механизм Битрикс для расширения сущностей (пользователей, разделов инфоблоков, HL-блоков и др.) новыми полями без изменения структуры базы данных.

Работа с ними имеет свои особенности.

Что такое UF-поля?

Физически значения UF-полей хранятся в отдельной таблице b_uts_…, а их описание — в b_user_field. ORM и старое API абстрагируют эту сложность, позволяя работать с UF-полями так, будто они являются частью основной таблицы.

Все UF-поля имеют префикс UF_. Например, UF_MY_COLOR.

Работа с UF-полями в старом API (на примере CIBlockSection)

1. Выборка (GetList)

Чтобы получить значение UF-поля, его нужно просто добавить в массив $arSelect.

CModule::IncludeModule('iblock');

$arFilter = [
    'IBLOCK_ID' => 5,
    'ACTIVE'    => 'Y',
];

// Добавляем UF-поля в select
$arSelect = ['ID', 'NAME', 'UF_SECTION_BANNER', 'UF_SHOW_ON_MAIN'];

$rsSections = CIBlockSection::GetList(['SORT' => 'ASC'], $arFilter, false, $arSelect);

while ($arSection = $rsSections->GetNext()) {
    echo "Раздел: " . $arSection['NAME'];
    // UF_SECTION_BANNER вернет ID файла
    if ($arSection['UF_SECTION_BANNER']) {
        echo " | Баннер: " . CFile::GetPath($arSection['UF_SECTION_BANNER']);
    }
    echo "<br>";
}

2. Фильтрация

Фильтрация по UF-полям происходит так же, как и по обычным, с указанием префикса UF_.

$arFilter = [
    'IBLOCK_ID' => 5,
    'ACTIVE'    => 'Y',
    '=UF_SHOW_ON_MAIN' => 1 // Найти разделы, у которых UF-свойство "Показывать на главной" (тип "Да/Нет") равно "Да"
];

3. Добавление и обновление

При вызове CIBlockSection::Add или Update значения UF-полей передаются в основном массиве $arFields с префиксом UF_.

$bs = new CIBlockSection;

$arFields = [
    "IBLOCK_ID"      => 5,
    "NAME"           => "Новый раздел с UF-полями",
    // Задаем значения UF-полей
    "UF_CUSTOM_COLOR" => "#FF0000",
    "UF_SHOW_ON_MAIN" => 0 // "Нет"
];

$ID = $bs->Add($arFields);

if ($ID > 0) {
    // Обновим поле
    $bs->Update($ID, ["UF_SHOW_ON_MAIN" => 1]);
} else {
    echo "Ошибка: " . $bs->LAST_ERROR;
}

Работа с UF-полями в D7 ORM

D7 ORM делает работу с UF-полями еще проще и прозрачнее. Они становятся частью сущности, как и обычные поля.

1. Выборка (getList)

Просто укажите UF_-поле в select. Никаких runtime или ReferenceField для этого не нужно!

use Bitrix\Main\Loader;
use Bitrix\Iblock\SectionTable;

Loader::includeModule('iblock');

$result = SectionTable::getList([
    'select' => ['ID', 'NAME', 'UF_SECTION_BANNER', 'UF_SHOW_ON_MAIN'],
    'filter' => ['=IBLOCK_ID' => 5, '=ACTIVE' => 'Y']
]);

while ($section = $result->fetch()) {
    // Данные доступны напрямую
    echo $section['NAME'] . ' | Показывать на главной: ' . ($section['UF_SHOW_ON_MAIN'] ? 'Да' : 'Нет') . '<br>';
}

2. Фильтрация

Аналогично, UF-поля используются в filter как обычные.

$result = SectionTable::getList([
    'select' => ['ID', 'NAME'],
    'filter' => [
        '=IBLOCK_ID' => 5,
        '=UF_SHOW_ON_MAIN' => true // ORM понимает boolean для полей "Да/Нет"
    ]
]);

3. Добавление и обновление (add, update)

UF-поля передаются в массиве данных наравне со всеми остальными.

$data = [
    "IBLOCK_ID" => 5,
    "NAME" => "Новый D7 раздел с UF",
    "UF_CUSTOM_COLOR" => "#0000FF",
    "UF_SHOW_ON_MAIN" => false
];

$result = SectionTable::add($data);

if ($result->isSuccess()) {
    $id = $result->getId();
    // Обновление
    SectionTable::update($id, ['UF_CUSTOM_COLOR' => '#FFFFFF']);
}

Вывод:
Пользовательские поля — мощный инструмент кастомизации сущностей Битрикс. D7 ORM значительно упрощает работу с ними, интегрируя их в объектную модель как «родные» поля. При работе со старым API важно помнить, что UF-поля передаются в тех же массивах, что и системные поля, но всегда с префиксом UF_.

Пользовательские поля, UF поля, Битрикс, GetList с UF, D7 ORM UF, CUserTypeManager, обновление UF полей, разделы инфоблоков.

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

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

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

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

Related Post

Получить список настроенных касс sale.cashbox.listПолучить список настроенных касс sale.cashbox.list

Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Получить список настроенных касс sale.cashbox.list», проанализируем лучшие практики

Автоматическая генерация символьного кода (транслитерация) при сохранении элементаАвтоматическая генерация символьного кода (транслитерация) при сохранении элемента

Частая задача контент-менеджера — заполнять символьный код для ЧПУ. Это рутинная работа, которую легко автоматизировать. Мы создадим обработчик, который будет транслитерировать название элемента в латиницу и сохранять его в поле CODE при

E-commerce в D7: Программное создание заказа (Bitrix\Sale\Order)E-commerce в D7: Программное создание заказа (Bitrix\Sale\Order)

Программное создание заказа — задача, возникающая при импорте заказов, создании «заказа в 1 клик» или разработке своего API. В D7 это делается через цепочку связанных объектов. Шаг 1: Создание объекта