Перейти к содержанию
Инструкция

Как вывести определённое поле элемента инфоблока в Битриксе

Как в шаблоне компонента 1С-Битрикс вывести одно конкретное поле элемента инфоблока – например счётчик показов SHOW_COUNTER. Разбираем массив FIELDS, служебные поля элемента и безопасный вывод значения.

Обновлено 22 июля 6 минут чтения

Иногда в шаблоне списка или детальной страницы нужно вывести не весь набор данных, а одно конкретное служебное поле элемента инфоблока – например количество показов, дату создания или ID автора. В 1С-Битрикс все такие поля лежат в массиве $arResult (а в шаблоне списка – в $arItem["FIELDS"]), и достать нужное можно точечно. Ниже – рабочий приём 2017 года, который остаётся валидным в 2026-м, плюс современные уточнения.

Что такое поля элемента и где искать их коды

У каждого элемента инфоблока есть два разных набора данных: поля (FIELDS) – системные атрибуты самого элемента, и свойства (PROPERTIES) – то, что вы создаёте вручную в настройках инфоблока. Счётчик показов SHOW_COUNTER – это именно поле, а не свойство. Полный список системных полей и их коды приведены в официальной документации Битрикса в разделе «Структура таблиц модуля информационных блоков» (таблица b_iblock_element): ID, NAME, CODE, SORT, SHOW_COUNTER, SHOW_COUNTER_START, DATE_CREATE, TIMESTAMP_X и другие.

Рабочий пример: вывести SHOW_COUNTER в шаблоне news.list

В шаблоне компонента bitrix:news.list элементы приходят в цикле по $arResult["ITEMS"], а служебные поля каждого элемента собраны в подмассиве $arItem["FIELDS"]. Пробегаемся по нему и ловим нужный код:

foreach ($arItem["FIELDS"] as $code => $value):
    if ($code == "SHOW_COUNTER"):        // ловим поле «Количество показов»
        echo intval($value);             // выводим как целое число
    elseif ($value != ""):               // остальные заполненные поля – как есть
        echo htmlspecialcharsbx($value);
    endif;
endforeach;

Два важных момента по сравнению со старым кодом. Во-первых, SHOW_COUNTER – счётчик, поэтому оборачиваем в intval(): получаем чистое число и отсекаем случайный мусор. Во-вторых, произвольные строковые поля стоит прогонять через htmlspecialcharsbx() – штатную функцию Битрикса для экранирования, чтобы значение из базы не сломало вёрстку и не создало XSS.

Когда цикл не нужен: обращаемся к полю напрямую

Перебор всего массива оправдан, только если вы заранее не знаете имя поля. Когда код поля известен, обращайтесь к нему по ключу – это быстрее и читаемее:

if (!empty($arItem["FIELDS"]["SHOW_COUNTER"])) {
    echo intval($arItem["FIELDS"]["SHOW_COUNTER"]);
}

На детальной странице (компонент bitrix:news.detail) поля лежат прямо в корне $arResult, поэтому там будет просто echo intval($arResult["SHOW_COUNTER"]);.

Важно: поле должно быть запрошено в выборке

Компонент отдаёт в шаблон только те поля, которые перечислены в его настройках. Если SHOW_COUNTER в $arItem["FIELDS"] отсутствует, добавьте его в параметр компонента FIELD_CODE[] («Поля» в настройках) – без этого значение просто не попадёт в результат. Это же правило действует и при собственных выборках через CIBlockElement::GetList: поле нужно указать в массиве $arSelect.

Современная альтернатива на D7 (ORM)

Если вы делаете собственную выборку вне компонента, в актуальных версиях Битрикса удобнее ORM-таблица инфоблоков. Одно поле одного элемента достаётся так:

use Bitrix\Iblock\ElementTable;

$row = ElementTable::getRow([
    'select' => ['ID', 'SHOW_COUNTER'],
    'filter' => ['=ID' => 42, '=ACTIVE' => 'Y'],
]);

echo intval($row['SHOW_COUNTER']);

Классический CIBlockElement::GetList тоже полностью рабочий – выбирайте по стилю проекта. ORM удобнее типизацией и синтаксисом, старое API – привычнее и не требует подключения сущностей.

Замечания по производительности и кэшу

  • Не трогайте кэш ради одного поля. Если данные уже пришли в шаблон компонента, вывод поля бесплатен – не делайте отдельный запрос в БД внутри цикла шаблона.
  • SHOW_COUNTER обновляется не мгновенно. Битрикс инкрементирует счётчик показов при просмотре детальной страницы; при активном кэшировании компонента значение может отставать, пока кэш не сброшен.
  • Экранируйте вывод. Пользовательские текстовые поля выводите через htmlspecialcharsbx(), числовые – через intval().

Смежные приёмы работы с инфоблоками – в гайдах «Получить ID из GET и вывести все элементы и свойства инфоблока», «В анонсе новостей вывести детальное описание» и «Получить название свойства из типа Справочник». А как посчитать сами элементы – в гайде «Подсчёт общего количества элементов в инфоблоке».

Частые вопросы

Чем поле элемента отличается от свойства инфоблока?

Поля (FIELDS) – это системные атрибуты самого элемента: ID, NAME, CODE, SHOW_COUNTER, DATE_CREATE и т. д. Свойства (PROPERTIES) вы создаёте вручную в настройках инфоблока. SHOW_COUNTER – это поле, поэтому его берут из $arItem["FIELDS"], а не из PROPERTIES.

Почему нужное поле не появляется в $arItem["FIELDS"]?

Компонент отдаёт только поля, перечисленные в его настройках. Добавьте нужное поле в параметр FIELD_CODE[] (раздел «Поля»). При собственной выборке через CIBlockElement::GetList укажите поле в массиве $arSelect.

Как вывести поле на детальной странице новости?

В компоненте bitrix:news.detail поля лежат прямо в корне $arResult, поэтому пишите echo intval($arResult["SHOW_COUNTER"]); без цикла по FIELDS.

Есть ли способ на новом ядре D7?

Да. Для собственной выборки одно поле одного элемента берут через Bitrix\Iblock\ElementTable::getRow() с массивами select и filter. Классический CIBlockElement::GetList в 2026 году тоже полностью валиден.

Валентина Меланина

Хотите обсудить свой проект?

Помогу с разработкой, аналитикой и AI-видимостью вашего сайта

Если у вас есть задача — от внедрения разметки и аналитики до полной переработки сайта — напишите, обсудим объём и подход.