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

Когда вы используете 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 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

4 коментаря

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

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

    2. Вау эффект будет, когда все это говно в автокеширование закинут.

      Извиняюсь за некро-постинг, просто уже в печенках сидит код битрикса. Уже очень надоело разгребать страницы, на которых 800+ запросов к базе.
      А потом после этого еще натыкаешься на пример, где внутри одного цикла, еще один getlist и автор такой “если у вас есть код лучше – буду рад его увидеть”. Да любой код будет лучше где нет геометрического роста запросов к базе! А у вас там еще CFile::GetPath – что тоже породит запрос. А потом на странице выводится 20 новостей и получается 200 запросов.

      Я понимаю, что API битрикса это просто говно (да даже их D7 это лютое говно). Каждый раз мне кажется, что они ненавидят разработчиков лютой ненавистью.

      1. У меня такие мысли возникают когда я смотрю на новый код оформления заказа или корзины 🙂 . Использовать шаблонизатор mustache и битрикс JS.. Вся логика оформления это JS, без слёз на этот код не взглянешь.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *