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

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

Средний рейтинг
1 из 5 звезд. 1 голосов.

Пользовательские поля (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 полей, разделы инфоблоков.

Мой рейтинг:

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

Related Post

Обновление свойств элемента инфоблока 1с BitrixОбновление свойств элемента инфоблока 1с Bitrix

Средний рейтинг Еще нет оценок SetPropertyValuesEx() — это метод для сохранения значений свойств элемента информационного блока в БД. Этот метод более экономен в количестве запросов к БД, чем SetPropertyValues(), потому

1С-Битрикс основные функции вывода в шаблонах1С-Битрикс основные функции вывода в шаблонах

Средний рейтинг Еще нет оценок В 1С-Битрикс основные и часто используемые функции вывода в шаблонах это: Некоторые из этих функций могут быть полезны при работе с шаблонами сайта. Например, функция AddBufferContent()

Создание кастомной страницы в административной панели БитриксСоздание кастомной страницы в административной панели Битрикс

Средний рейтинг Еще нет оценок Иногда стандартного функционала админки не хватает. Требуется создать страницу для кастомного отчета, дашборда или инструмента управления. Битрикс позволяет легко интегрировать свои страницы в административный интерфейс.