1С-Битрикс

Как получить значение пользовательского поля раздела в 1С-Битрикс

Как получить значение пользовательского поля раздела в 1С-Битрикс. Два рабочих варианта с примерами кода на PHP через CIBlockSection::GetByID и CIBlockSection::GetList.

sqlka.ruОпубликовано: Чтение: 3 мин.
Как получить значение пользовательского поля раздела в 1С-Битрикс

Пользовательские поля разделов (UF-поля) в 1С-Битрикс

Пользовательские поля разделов (UF-поля) в 1С-Битрикс позволяют расширять стандартную функциональность инфоблоков. Однако их получение отличается от работы со свойствами элементов. В этой статье рассмотрим два практических способа получения значений таких полей через API Битрикс.

Особенности работы с UF-полями разделов

Пользовательские поля разделов хранятся в отдельных таблицах базы данных и имеют префикс UF_ в своем символьном коде. Для доступа к ним необходимо использовать методы класса CIBlockSection, а не CIBlockElement.

Способ 1: Использование CIBlockSection::GetByID()

Этот метод подходит, когда точно известен ID нужного раздела. Он возвращает массив всех полей раздела, включая пользовательские.

<?php
// Указываем ID нужного раздела
$sectionId = 123;

// Получаем данные раздела
$sectionFields = CIBlockSection::GetByID($sectionId)->GetNext();

// Обращаемся к пользовательскому полю по его символьному коду
$userFieldValue = $sectionFields['UF_USER_FIELD_NAME'];

// Используем полученное значение
if (!empty($userFieldValue)) {
    echo "Значение поля: " . $userFieldValue;
}
?>

Преимущества: Простота и минимальное количество кода.
Недостатки: Невозможно выбрать конкретные поля — метод возвращает все данные раздела.

Способ 2: Использование CIBlockSection::GetList()

Это более гибкий метод, позволяющий фильтровать разделы по разным критериям и выбирать только нужные поля, что повышает производительность.

<?php
// Подключаем модуль инфоблоков (если не подключен глобально)
CModule::IncludeModule("iblock");

// Задаем параметры
$iblockID = 1;          // ID инфоблока
$sectionID = 123;       // ID раздела

// Формируем запрос
$res = CIBlockSection::GetList(
    array(), // Сортировка
    array(
        "IBLOCK_ID" => $iblockID,
        "ID"       => $sectionID
    ), // Фильтр
    false, // Не учитывать подразделы
    array(
        "UF_SAMPLE" // Указываем символьные коды нужных полей
    ) // Выбираемые поля
);

// Обрабатываем результат
if ($section = $res->GetNext()) {
    $propertyValue = $section["UF_SAMPLE"];
    
    if (!empty($propertyValue)) {
        echo "Значение пользовательского поля: " . $propertyValue;
    }
}
?>

Важные нюансы использования GetList()

  • Четвертый параметр ($arSelect) должен явно содержать символьные коды нужных UF-полей.
  • Если не передавать $arSelect или передать false, вернутся только стандартные поля раздела (без пользовательских).
  • Можно выбирать несколько полей одновременно: array("UF_FIELD1", "UF_FIELD2", "NAME", "ID").

Практический пример: вывод значения в компоненте

Часто необходимо получить значение UF-поля в контексте работы компонента. Вот как это можно реализовать:

<?php
// Внутри компонента, где известен ID раздела
$sectionId = $arResult['SECTION']['ID']; // Пример получения ID из результата

// Получаем значение конкретного UF-поля
$sectionRes = CIBlockSection::GetList(
    array(),
    array('ID' => $sectionId),
    false,
    array('UF_CUSTOM_FIELD')
);

if ($section = $sectionRes->GetNext()) {
    // Используем значение в шаблоне
    $arResult['SECTION']['CUSTOM_FIELD'] = $section['UF_CUSTOM_FIELD'];
}
?>

Работа с разными типами UF-полей

Тип возвращаемого значения зависит от настроек пользовательского поля:

  • Строка, число — возвращается как есть.
  • Файл — возвращается ID файла из таблицы b_file.
  • Список — возвращается ID выбранного значения (или массив ID для множественного выбора).
  • Привязка к элементам/разделам — возвращается ID привязанного элемента (или массив ID).

Оптимизация производительности

При частом обращении к UF-полям разделов учитывайте:

  1. Всегда указывайте только необходимые поля в параметре $arSelect.
  2. Кешируйте результаты запросов, особенно в публичной части сайта.
  3. При массовой обработке разделов используйте CIBlockSection::GetList() с фильтром по нескольким ID вместо множественных вызовов GetByID().

Диагностика проблем

Если код не возвращает ожидаемые значения:

  1. Убедитесь, что символьный код поля указан с префиксом UF_.
  2. Проверьте, что поле действительно создано для данного инфоблока.
  3. Убедитесь, что для конкретного раздела задано значение этого поля.
  4. Используйте административный интерфейс (Настройки инфоблока → Пользовательские поля разделов) для проверки настроек.

Хотите освоить SQL для работы с данными?

В SQLka можно изучать SQL последовательно или готовиться к собеседованиям. Запросы выполняются прямо в браузере — устанавливать базу данных не нужно.

sqlka.ru

support@sqlka.ru

Дальше по теме

1С-Битрикс

Логирование в 1С-Битрикс: полное руководство для разработчика

Полное руководство по логированию в 1С-Битрикс: какие логгеры есть, как их настроить, форматировать сообщения и подключать к своим классам. Примеры кода и советы по использованию PSR-3

sqlka.ruЧтение: 4 мин.
← Все статьи