Иногда в шаблоне списка или детальной страницы нужно вывести не весь набор данных, а одно конкретное служебное поле элемента инфоблока – например количество показов, дату создания или 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 и вывести все элементы и свойства инфоблока», «В анонсе новостей вывести детальное описание» и «Получить название свойства из типа Справочник». А как посчитать сами элементы – в гайде «Подсчёт общего количества элементов в инфоблоке».