Битрикс как получить заполненные значения элемента у свойства «тип список»

Когда вы используете API в CMS Битрикс, очень часто вы не видите всех значений у свойства список. Или же, вы видите в цикле один и тот же товар, и сразу несколько выбранных значений, что тоже не очень удобно.

Как вывести все значения у множественного типа Список в Битриксе

В данном примере речь пойдет именно о множественном свойстве, с обычными свойствами таких проблем не возникает обычно. Что говорит нам документация для метода CIBlockElement::GetProperty :

$VALUES = array();
$res = CIBlockElement::GetProperty(IKSO_CUSTOM::$IBLOCKS['brands'], $BRAND_ID, "sort", "asc", array("CODE" => "BRAND_CLASS"));
while ($ob = $res->GetNext())
{
    $VALUES[] = $ob['VALUE'];
}

Давайте немного изменим код во 2 строке, чтобы было более понятнее:

$res = CIBlockElement::GetProperty($IBLOCK_ID, $ELEMENT_ID, array("sort"=>"asc"), array("CODE" => "COLORS"));

Вот, теперь более понятно. Первый параметр ID инфоблока, затем ID элемента, далее массив с сортировкой и наконец самый важный параметр — массив с фильтром.

Выбирать можно не только по символьному коду свойства, еще есть такие вот варианты:

    NAME - название свойства (можно использовать маску %|_),
    ID - код свойства,
    ACTIVE - активность (Y|N),
    SEARCHABLE - участвует в поиске или нет (Y|N),
    PROPERTY_TYPE - тип свойства,
    CODE - символьный код свойства,
    EMPTY - пустота свойства (Y|N).

Рассмотрим код немного сложнее. Сразу скажу, что он не претендует на премию «вау, как круто написано» :).
Чуть ниже я объясню что мы делаем и зачем:

$VALUES = array();
$res = CIBlockElement::GetProperty(1, $arResult['ID'], "sort", "asc", array("CODE" => "COLORS"));
$b = 0;
while ($ob = $res->GetNext()) {
	$my_elements = CIBlockElement::GetList (
		Array("ID" => "ASC"),
		Array("IBLOCK_ID" => 19, "NAME" => $ob['DESCRIPTION']),
		false,
		false,
		Array('ID', 'PREVIEW_PICTURE')
	);
	if ($ar_fields = $my_elements->GetNext()) {
		$VALUES[$b]['BG'] = CFile::GetPath($ar_fields['PREVIEW_PICTURE']);
	}

	$VALUES[$b]['IMG'] = CFile::GetPath($ob['VALUE']);
	$VALUES[$b]['DESC'] = $ob['DESCRIPTION'];
	$b++;
}

У нас есть инфоблок с заполненными названиями и картинками, в моем случае это цвет автомобиля.

Тут внимательней, можно легко запутаться. $ob[‘DESCRIPTION’] — описание для картинки товара, и по этому описанию ищем элемент, который подходит по имени — «NAME» => $ob[‘DESCRIPTION’].

Дальше проще, используем CFile::GetPath — уже знакомую вам из данной статьи.

Ссылка на документацию для самых опытных и любопытных: https://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/getproperty.php

Если на вашем проекте необходимо организовать сложную систему соответствий у товара по его свойствам, или вам просто нужна помощь по сайту, обращайтесь ко мне

автор: Dmitriy

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

Какие услуги предоставляю:
- Создание сайтов, шаблонов и компонентов на 1С-Битрикс;
- Разработка функционала с нуля и доработка кода на уже созданных проектах;
- Адаптивная вёрстка макетов и натяжка на Битрикс;
- Парсинг файлов и выгрузка на сайт (форматы - CSV, XML, XLSX, JSON)
- Интеграции со сторонними сервисами по API;
- Многоязычные версии и многое другое.

Если у вас остались вопросы, свяжитесь со мной любым удобным для вас способом или оставьте комментарий внизу.
E-mail: dmitriyribka@gmail.com
Skype: cinemacreaterus

2 комментария

  1. Т.е. вы пихаете GetList в цикл и называете это «вау» кодом ? Это действительно так, только с абсолютно обратным эффектом.

    1. Вы правы, в идеале все значения из цикла нужно добавить в массив, и только потом запустить CIBlockElement::GetList. Но если у вас есть вариант кода еще лучше, буду рад его увидеть 🙂

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

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