Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Выборка по свойствам. Как ?

00 голосов
7
Добрый день уважаемые!

Подскажите пожалуйста, как правильно организовать выборку по свойствам ?

Например такой вот код -
Код
$items = GetIBlockElementList($iblock['ID'], 0, array('SORT' => 'ASC', 'DATE_CREATE' => 'DESC', 'ACTIVE' => 'Y'), 5, array('PROPERTY' => array('mpage' => array('VALUE' => 'yes'))));


возвращает все значения без учета значения mpage :(
Как правильно можно сделать, чтобы значение этого свойства участвовало в выборке данных ? Свойство mpage определен как список.

Спасибо.
спросил 24 Авг, 13 от Vidoc (120 баллов)

7 Ответы

00 голосов
Добрый день

Для свойств типа "список" необходимо указывать ID соответствующего значения.
Сейчас ID значений можно увидеть рядом со значениями в настройках свойства типа "список".
Вы также можете получать ID значений по коду и самому значению:

Код
$enum_prop = CIBlockPropertyEnum::GetList(Array(), Array("IBLOCK_ID"=>$arIBlock["ID"], "CODE"=>"<property_code>", "VALUE"=>"<property_value>"));
$arEnum = $enum_prop->GetNext();
$ValueID = $arEnum["ID"];  


затем этот $ValueID нужно использовать в фильтре для выборки элементов.

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

Код
$enum_prop = CIBlockPropertyEnum::GetList(Array(), Array("IBLOCK_ID"=>$arIBlock["ID"], "CODE"=>"<property_code>", "VALUE"=>Array("<property_value1>", "<property_value2>", ...))); 
ответил 24 Авг, 13 от Damani (1,180 баллов)
00 голосов
Спасибо за ответ, но к сожалению используя Ваш метод, по $ValueID в фильтре выдаются неверные результаты.
ответил 06 Ноя, 13 от Vidoc (120 баллов)
00 голосов
Пришлите, пожалуйста, отрывок вашего кода, где вы получаете $ValueID и применяете его в в фильтре.
ответил 12 Фев, 14 от BlackEva (820 баллов)
00 голосов
Большое спасибо.
Путем последовательного перебора различных вариантов фильтров нашла правильный :)
Вот такой вот кусок кода заработал.
Код
        $enum_prop = CIBlockPropertyEnum::GetList(Array(), Array("IBLOCK_ID"=>$iblock["ID"], "CODE"=>"mpage", "VALUE"=>"yes"));
      $arEnum = $enum_prop->GetNext();
      $ValueID = $arEnum["ID"];  
         $items = GetIBlockElementList($iblock['ID'], 0, array('SORT' => 'ASC', 'DATE_CREATE' => 'DESC', 'ACTIVE' => 'Y'), 5, array('PROPERTY' => array('mpage' => ValueID)));
ответил 02 Июнь, 14 от Vidoc (120 баллов)
00 голосов
Используйте фильтр

Код
array('PROPERTY' => array('mpage' => array('VALUE' => $ValueID))));
ответил 30 Сен, 14 от Damani (1,180 баллов)
00 голосов
Впрочем, возможно использовать такой код:
Код
array('PROPERTY' => array('mpage' => $ValueID))
ответил 02 Фев, 15 от Damani (1,180 баллов)
00 голосов
Пробовала с указаным Вами фильтром - выдавались все значения.

Рабочим оказался вариант
Код
array('PROPERTY' => array('mpage' => $ValueID)));
ответил 16 Май, 15 от Vidoc (120 баллов)

Похожие вопросы

0 голосов
3 ответов
спросил 31 Июль, 13 от YuRki (160 баллов)
0 голосов
2 ответов
спросил 21 Апр, 14 от BAGIRA (560 баллов)
0 голосов
2 ответов
0 голосов
9 ответов
0 голосов
1 ответ
спросил 20 Июль, 15 от Rattlesneyk (140 баллов)