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

фильтр по свойству типа список

00 голосов
7
Приветствую всех! У меня к вам такой вопрос. Как можно организовать фильтр по свойству типа Список со связкой "и"? По-умолчанию, если я задаю в фильтре массив идентификаторов значений свойства, то Битрикс использует связку "или"... Существуют ли штатные решения? Спасибо.
спросил 10 Авг, 13 от Fox2009 (320 баллов)

7 Ответы

00 голосов
ответил 10 Авг, 13 от Shinichi (220 баллов)
00 голосов
Нет это не то. Я использую API Битрикса, а именно класс CIBlockElement и метод GetList. В этом методе можно задавать параметры фильтрации. Но! У меня не получается отфильтровать значения свойств типа список по логической связке "И". Пробую тоже использовать логику сложного фильтра со строковыми значениями свойства, все равно не фильтрует... :cry:
ответил 14 Окт, 13 от Fox2009 (320 баллов)
00 голосов
если нужно по "и" фильтровать, то помоему связок не нужно делать. Просто сделать простейший фильтр.

$arFilter = array(
"PROPERTY_СИМВ.КОД_VALUE" => "Y", // это для свойства типа список
"PROPERTY_СИМВ.КОД" => "Значение" // это для др. свойства.
);

по умолчанию в фильтре все по "И" идет, если нужно "ИЛИ" то тогда уже пригодится сложная логика
ответил 15 Янв, 14 от ioannes (540 баллов)
00 голосов
Нет, у меня как раз таки по-умолчанию работает через "или"...
Пробовал разными способами, везде одинаково работает
1. Способ

$arFilter = Array(
"PROPERTY_PROP1" => Array(PROP1_ID1, PROP1_ID2)
);
// срабатывает только связка "или"

2. Способ

$arFilter = Arrray(
"PROPERTY_PROP1_VALUE" => Array(PROP1_VALUE1, PROP1_VALUE2)
);
// тоже работает как "или"

3. Способ

$arFilter = Array(
"?PROPERTY_PROP1_VALUE" => Array("PROP1_VALUE1 & PROP1_VALUE2")
);
// как ни странно, но тоже работает как "или"


По идее последний способ должен вроде работать, в документации о нем и говорится, но видимо со свойствами типа список не прокатывает :(
ответил 03 Май, 14 от Fox2009 (320 баллов)
00 голосов
Если у вас версия >8.5, то попробуйте GetList с фильтром
Код
$arFilter = Array(array('LOGIC' => 'AND', "PROPERTY_PROP1" => Array(PROP1_ID1, PROP1_ID2));

или
Код
$arFilter = Array(
  array(
    'LOGIC' => 'AND', 
    "PROPERTY_PROP1" => PROP1_ID1, 
    "PROPERTY_PROP1" => PROP1_ID2
  )
);
ответил 29 Авг, 14 от Almarea (3,760 баллов)
00 голосов
Цитата
Александр Обухов пишет:
Нет, у меня как раз таки по-умолчанию работает через "или"... Пробовал разными способами, везде одинаково работает 1. Способ

$arFilter = Array( "PROPERTY_PROP1" => Array(PROP1_ID1, PROP1_ID2) ); // срабатывает только связка "или"


Извиняюсь. я не верно понял вопрос. В вашем случае подходит способ, описанный Дмитрием.
ответил 04 Янв, 15 от ioannes (540 баллов)
00 голосов
Странно... Версия 8.5.2, но данный метод не срабатывает, вообще не фильтрует никак по этому свойству, просто выводит все записи... Приведу то, как я записываю весь свой фильтр, может это поможет...

Код
$arFilter = Array(
   "SECTION_ID" => $curSectionID, 
   "INCLUDE_SUBSECTIONS" => "Y",
   Array(
      'LOGIC' => 'AND',
      "PROPERTY_PRODUCTION" => $arProductionID
   )
);
ответил 23 Апр, 15 от Fox2009 (320 баллов)

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

0 голосов
3 ответов
0 голосов
5 ответов
0 голосов
6 ответов
спросил 19 Окт, 13 от limon2008 (260 баллов)