Класс CIBlockResult — это один из важных инструментов для разработчиков 1С-Битрикс, когда требуется гибко управлять результатами запросов к информационным блокам. Он наследуется от класса CDBResult и обладает всеми его свойствами и методами, но также дополняется собственными возможностями, существенно упрощающими обработку элементов ИБ.

В данной статье мы рассмотрим основные методы CIBlockResult, разберёмся, в каких ситуациях каждый из них применяется, и приведём рабочие примеры использования.
1. Общая информация о CIBlockResult
Класс CIBlockResult возвращается при вызове таких методов, как:
- CIBlockElement::GetList
- CIBlockElement::GetByID
- Функции GetIBlockElementList, GetIBlockElementListEx
В основе своей он предоставляет доступ к данным, которые мы запрашиваем из инфоблока (например, списки элементов с определёнными параметрами фильтрации и сортировки). Благодаря методам CIBlockResult мы можем последовательно перебирать записи, получать поля, свойства, а также гибко работать со строками для построения адресов (URL).
2. Методы класса CIBlockResult
2.1. GetNext
Метод: GetNext()
С версии: 3.0.5
Описание: Возвращает из выборки массив полей элемента с уже подставленными ссылками в полях DETAIL_PAGE_URL
и LIST_PAGE_URL
. Это означает, что, если вы используете настройки для шаблонов путей, при получении элемента через GetNext()
ссылки в полях будут соответствовать вашим шаблонам.
Пример использования:
<?php
// Получаем список элементов инфоблока
$arSelect = ["ID", "NAME", "DETAIL_PAGE_URL", "IBLOCK_ID"];
$arFilter = ["IBLOCK_ID" => 5, "ACTIVE" => "Y"];
$rsElements = CIBlockElement::GetList(
["SORT" => "ASC"], // Сортируем по полю SORT
$arFilter,
false,
false,
$arSelect
);
// Перебираем полученные элементы
while ($arElement = $rsElements->GetNext()) {
echo "<p>";
echo "ID элемента: " . $arElement["ID"] . "<br>";
echo "Название: " . $arElement["NAME"] . "<br>";
echo "Ссылка на детальную страницу: " . $arElement["DETAIL_PAGE_URL"] . "<br>";
echo "</p>";
}
?>
В результате мы получим последовательный вывод всех нужных полей. Обратите внимание, что поле DETAIL_PAGE_URL
уже будет содержать корректный путь в зависимости от настроек инфоблока и указанных шаблонов.
2.2. GetNextElement
Метод: GetNextElement()
С версии: 3.1.3
Описание: Возвращает объект типа _CIBElement
(не массив!), который даёт более гибкий доступ к полям и свойствам элемента. С помощью возвращённого объекта можно отдельно вызывать методы для получения полей (GetFields()
) и свойств (GetProperties()
), что особенно удобно, когда вам нужно управлять большим количеством полей и свойств, а также в случаях, когда свойства содержат массивы данных.
Пример использования:
<?php
$arSelect = ["ID", "NAME", "IBLOCK_ID"];
$arFilter = ["IBLOCK_ID" => 5, "ACTIVE" => "Y"];
$rsElements = CIBlockElement::GetList(
["SORT" => "ASC"],
$arFilter,
false,
false,
$arSelect
);
// Выводим поля и свойства каждого элемента
while ($obElement = $rsElements->GetNextElement()) {
// Достаём поля
$arFields = $obElement->GetFields();
// Достаём свойства
$arProps = $obElement->GetProperties();
echo "<h3>Элемент: {$arFields["NAME"]}</h3>";
echo "ID: {$arFields["ID"]}<br>";
// Если вам нужны определённые свойства:
if (isset($arProps["PRICE"])) {
echo "Цена: " . $arProps["PRICE"]["VALUE"] . "<br>";
}
// Вы можете перебрать все свойства:
foreach ($arProps as $propCode => $arProp) {
echo "Свойство {$propCode}: " . $arProp["VALUE"] . "<br>";
}
}
?>
Здесь мы видим, что, используя метод GetNextElement()
, мы можем отдельно получить поля (GetFields()
) и свойства (GetProperties()
) элемента, что во многих случаях упрощает их обработку.
2.3. SetUrlTemplates
Метод: SetUrlTemplates($strDetailPageURL, $strListPageURL = "", $strSectionPageURL = "")
С версии: 7.1.3
Описание: Позволяет задать шаблоны путей к элементам прямо из объекта результата выборки. Это может быть полезно, если вы хотите переопределить URL для детальной и списоковой страниц, а также для страниц разделов, не меняя глобальные настройки инфоблока.
Пример использования:
<?php
$arSelect = ["ID", "NAME", "DETAIL_PAGE_URL"];
$arFilter = ["IBLOCK_ID" => 5, "ACTIVE" => "Y"];
$rsElements = CIBlockElement::GetList([], $arFilter, false, false, $arSelect);
// Устанавливаем собственные шаблоны путей
$rsElements->SetUrlTemplates("/catalog/detail.php?ID=#ELEMENT_ID#", "/catalog/list.php", "/catalog/section.php?SECTION_ID=#SECTION_ID#");
while ($arItem = $rsElements->GetNext()) {
echo "<p>";
echo "ID элемента: " . $arItem["ID"] . "<br>";
echo "Название: " . $arItem["NAME"] . "<br>";
// DETAIL_PAGE_URL теперь будет формироваться по вашему шаблону
echo "Ссылка на детальную страницу: " . $arItem["DETAIL_PAGE_URL"] . "<br>";
echo "</p>";
}
?>
Таким образом, вы можете динамически влиять на то, как будет формироваться URL-адрес для каждого элемента прямо во время итерации по результатам.
2.4. SetSectionContext
Метод: SetSectionContext($arSection)
С версии: 7.1.3
Описание: Устанавливает контекст раздела для текущего объекта результата выборки, чтобы подставлять данные раздела в шаблоны путей. Это особенно актуально, когда нужно правильно формировать URL элементов, учитывая структуру разделов: к примеру, если элементы лежат в разных разделах и каждому разделу соответствует своя часть URL.
Пример использования:
<?php
// Допустим, мы заранее получили массив данных о разделе
$arSection = [
"ID" => 10,
"CODE" => "phones",
"IBLOCK_ID" => 5
];
$arSelect = ["ID", "NAME", "DETAIL_PAGE_URL"];
$arFilter = ["IBLOCK_ID" => 5, "ACTIVE" => "Y", "SECTION_ID" => $arSection["ID"]];
$rsElements = CIBlockElement::GetList([], $arFilter, false, false, $arSelect);
// Устанавливаем контекст конкретного раздела
$rsElements->SetSectionContext($arSection);
// Также можем указать шаблон пути для элементов
$rsElements->SetUrlTemplates("/catalog/#SECTION_CODE#/#ELEMENT_CODE#.php");
while ($arItem = $rsElements->GetNext()) {
echo "<p>";
echo "ID элемента: " . $arItem["ID"] . "<br>";
echo "Название: " . $arItem["NAME"] . "<br>";
echo "URL: " . $arItem["DETAIL_PAGE_URL"] . "<br>";
echo "</p>";
}
?>
Благодаря этому при формировании DETAIL_PAGE_URL
система будет учитывать поля раздела (например, #SECTION_CODE#
), и каждый элемент будет иметь правильную структуру ссылки.
3. Резюме
Класс CIBlockResult даёт разработчикам 1С-Битрикс удобный инструментарий для:
- Построчной обработки результатов выборки, благодаря методам
GetNext()
иGetNextElement()
. - Получения полей и свойств отдельных элементов и их гибкого отображения.
- Настройки URL-шаблонов при формировании ссылок на элементы и разделы, не затрагивая глобальных параметров инфоблока.
- Удобного учета контекста раздела при необходимости формировать «человеко-понятные» ссылки и структуру каталога.
Используя методы SetUrlTemplates
и SetSectionContext
, вы можете корректно подставлять параметры разделов и инфоблоков в формируемые пути, что позволяет создавать удобную и логичную структуру URL на сайте.
В целом, CIBlockResult дополняет классический функционал CDBResult, позволяя точечно влиять на отображение и обработку элементов инфоблока. Разработчики, регулярно работающие с каталогами и контентом, по достоинству оценят эту гибкость, когда нужно вывести данные о товарах, услугах или других материалах информационных блоков в требуемом формате.
Используйте методы класса CIBlockResult там, где важна детальная постобработка данных, и ваша работа с элементами ИБ станет более предсказуемой, гибкой и управляемой.
---
Надеемся, что данное руководство по CIBlockResult поможет вам быстрее ориентироваться в методах класса и эффективно решать задачи по выводу элементов инфоблока на сайте. Удачной разработки!