Битрикс — как получить ID значения свойства тип список

Рассмотрим как получить ID свойства тип список, зная его значение.

Как получить ID элемента инфоблока зная его имя в Битриксе?

Для начала рассмотрим простой пример — нам необходимо узнать ID элемента (или раздела) зная его имя, символьный код или другой параметр:

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
if (CModule::IncludeModule("iblock")):
	$IBLOCK_ID = 1;
	$res = CIBlockElement::GetList (
		Array("ID" => "ASC"),
		Array("IBLOCK_ID" => $IBLOCK_ID, "ACTIVE" => "Y", "NAME" => $name),
		false,
		false,
		Array('ID', 'NAME', 'DETAIL_PAGE_URL')
	);
	if ($arItem = $res->GetNext()) {
		print_r($arItem);
	}
endif;

$arItem[‘ID’] — и будет ID нашего элемента инфоблока. Сделаем тоже самое для раздела, только теперь будем искать ID раздела по символьному коду:

$res = CIBlockSection::GetList (
	Array("ID" => "ASC"),
	Array("IBLOCK_ID" => 14, "ACTIVE" => "Y", "CODE" => $code),
	false,
	Array('ID', 'NAME', 'SECTION_PAGE_URL', 'PICTURE')
);
while ($arItem = $res->GetNext()) {
	print_r($arItem);
}

$arItem[‘ID’] — теперь это ID секции.
Зачем я привёл вам эти примеры? Для того чтобы вы понимали, в свойствах всё хранится немного по другому.

Как узнать ID значения свойства, зная его имя в Битриксе?

Для этого нам понадобится метод CIBlockPropertyEnum::GetList. Структура данных у свойств выглядит следующим образом:


    VALUE - по значению (по шаблону [%_]);
    ID - по коду значения варианта свойства;
    SORT - по индексу сортировки варианта свойства;
    DEF - по параметру "значение по умолчанию" (Y|N);
    XML_ID - по внешнему коду(по шаблону [%_]);
    EXTERNAL_ID - по внешнему коду;
    CODE - по символьному коду свойства (по шаблону [%_]);
    PROPERTY_ID - по числовому или символьному коду свойства;
    IBLOCK_ID - фильтр по коду информационного блока, которому принадлежит свойство;

Как будет выглядеть код, если нам нужно узнать имя свойства по его ID:

$property_enums = CIBlockPropertyEnum::GetList(
	Array("ID"=>"ASC", "SORT"=>"ASC"), 
	Array("IBLOCK_ID"=>34, "CODE"=>"PARTNER", "ID" => $_REQUEST['partner'])
);
if ($enum_fields = $property_enums->GetNext()) {
	$partner = $enum_fields["VALUE"];
}

$enum_fields[«VALUE»] — это аналог имени в элементах и названиях разделов.
Обратная процедура просто меняет фильтр на:

Array("IBLOCK_ID"=>34, "CODE"=>"PARTNER", "VALUE" => $_REQUEST['partnerName'])

$enum_fields[«ID»] — и будет наше необходимое ID.
«IBLOCK_ID»=>34, «CODE»=>»PARTNER» — инфоблок и символьный код нашего свойства тип список соответственно.

Также не забывайте что зная ID есть более короткие записи таких методов:

CIBlockPropertyEnum::GetByID($propertyID);
CIBlockElement::GetByID($elementID);
CIBlockSection::GetByID($sectionID);

Их можно рекомендовать потому как они имеют более короткую запись:

$res = CIBlockElement::GetByID($_REQUEST['prize']);
if ($ar_res = $res->GetNext()) {
	$prizeName = $ar_res['NAME'];
}

Но данный метод возвращает много лишних полей, поэтому всегда помните про 2 вещи:
1. этот метод не рекомендую выполнять в цикле, сильно увеличится количество запросов к базе, лучше написать правильный GetList. Однажды, я искал в своем коде ошибку, страница грузилась более 5 секунд, и оказалось, что причина была в этом 🙂
2. По сути это очень похоже на гет лист, только вы не ограничиваете возвращаемые поля

автор: Dmitriy

Занимаюсь веб-разработкой с 2011 года. Посмотреть некоторые из моих работ, а также узнать чуть больше обо мне, вы можете на forwww.ru.

- Создание сайтов на 1С-Битрикс любой сложности
- Вёрстка макетов Figma, Photoshop, Zeplin
- Поддержка проектов на Битриксе
- Разработка нового функционала для сайта
- Парсинг данных
- Выгрузка из файлов в формате XML, YML, XLS, XLSX, CSV, JSON
- Интеграция по API со сторонними сервисами
и многое другое

E-mail: dmitriyribka@gmail.com

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *