CIBlockElement::GetProperty в Битрикс — получение свойств элемента инфоблока
Метод CIBlockElement::GetProperty() предназначен для получения значений свойств элемента инфоблока в 1С-Битрикс. С его помощью можно получить как одиночные, так и множественные свойства, включая строки, числа, списки, файлы, привязки к элементам и разделам.
Краткий ответ
Для получения свойств элемента необходимо вызвать метод CIBlockElement::GetProperty(), указав ID инфоблока и ID элемента.
<?php
$res = CIBlockElement::GetProperty(5, 123);
while ($property = $res->Fetch()) {
echo $property["CODE"].": ".$property["VALUE"]."<br>";
}
Описание функции
Метод возвращает объект выборки со свойствами указанного элемента инфоблока. В отличие от выборки через CIBlockElement::GetList(), метод позволяет получить полный набор данных по каждому свойству, включая тип, код, описание и значение.
CIBlockElement::GetProperty часто используется при работе с множественными свойствами, файловыми полями и сложными структурами данных, когда стандартного получения через GetList() недостаточно.
Результатом работы метода является объект класса CDBResult, который необходимо обрабатывать через методы Fetch() или GetNext().
Синтаксис
CDBResult CIBlockElement::GetProperty(
int $IBLOCK_ID,
int $ELEMENT_ID,
array $arOrder = array(),
array $arFilter = array()
);
Параметры
| Параметр | Тип | Описание |
|---|---|---|
| $IBLOCK_ID | int | ID инфоблока. |
| $ELEMENT_ID | int | ID элемента. |
| $arOrder | array | Массив сортировки результата. |
| $arFilter | array | Фильтр по свойствам. |
Основные поля результата
| Поле | Описание |
|---|---|
| ID | ID свойства. |
| CODE | Символьный код свойства. |
| NAME | Название свойства. |
| VALUE | Значение свойства. |
| DESCRIPTION | Описание значения. |
| PROPERTY_TYPE | Тип свойства. |
| MULTIPLE | Признак множественного свойства. |
Пример использования
Получение всех свойств элемента
<?php
$res = CIBlockElement::GetProperty(5, 123);
while ($property = $res->Fetch()) {
echo $property["NAME"].": ".$property["VALUE"]."<br>";
}
Получение свойства по коду
<?php
$res = CIBlockElement::GetProperty(
5,
123,
[],
["CODE" => "PRICE"]
);
if ($property = $res->Fetch()) {
echo $property["VALUE"];
}
Получение множественного свойства
<?php
$tags = [];
$res = CIBlockElement::GetProperty(
5,
123,
[],
["CODE" => "TAGS"]
);
while ($property = $res->Fetch()) {
$tags[] = $property["VALUE"];
}
print_r($tags);
Получение файлового свойства
<?php
$res = CIBlockElement::GetProperty(
5,
123,
[],
["CODE" => "PHOTO"]
);
if ($property = $res->Fetch()) {
$file = CFile::GetFileArray(
$property["VALUE"]
);
echo '<img src="'.$file["SRC"].'" alt="">';
}
Типичные ошибки
Неверный ID инфоблока
CIBlockElement::GetProperty(
999,
123
);
Если инфоблок не существует, результат будет пустым.
Неверный ID элемента
CIBlockElement::GetProperty(
5,
999999
);
Метод не вернет данные, если элемент отсутствует.
Использование Fetch() только один раз
$property = $res->Fetch();
Для множественных свойств необходимо использовать цикл while.
Ожидание массива вместо объекта выборки
Метод возвращает объект CDBResult, который необходимо перебирать.
$res = CIBlockElement::GetProperty(
5,
123
);
while ($property = $res->Fetch()) {
}
Аналог на D7
В современных проектах рекомендуется использовать ORM D7 и сгенерированные классы инфоблоков.
Получение свойств через ORM-класс
<?php
use Bitrix\Iblock\Elements\ElementCatalogTable;
$item = ElementCatalogTable::getByPrimary(
123,
[
'select' => [
'ID',
'NAME',
'PRICE',
'BRAND'
]
]
)->fetch();
print_r($item);
Получение через ElementPropertyTable
<?php
use Bitrix\Iblock\ElementPropertyTable;
$res = ElementPropertyTable::getList([
'filter' => [
'=IBLOCK_ELEMENT_ID' => 123
]
]);
while ($property = $res->fetch()) {
print_r($property);
}
FAQ
Что возвращает CIBlockElement::GetProperty?
Метод возвращает объект выборки CDBResult со свойствами элемента.
Как получить значение свойства по коду?
<?php
$res = CIBlockElement::GetProperty(
5,
123,
[],
["CODE" => "PRICE"]
);
$property = $res->Fetch();
echo $property["VALUE"];
Как получить множественное свойство?
Необходимо перебрать все записи результата через цикл while.
Можно ли получить свойства вместе с элементом?
Да, через CIBlockElement::GetList() и выборку полей вида PROPERTY_CODE. Однако для сложных свойств удобнее использовать GetProperty.
Как получить файл из файлового свойства?
Используйте функцию CFile::GetFileArray() и поле SRC.
Что лучше использовать в новых проектах?
Для новых разработок рекомендуется ORM D7 и сгенерированные классы инфоблоков. Метод CIBlockElement::GetProperty чаще используется при поддержке существующих проектов и интеграций.