Как в Bitrix искать элементы инфоблока по правилу «или»?

Каким образом сформировать массив $arFilter в методе:
CIBlockElement::GetList($arSort, $arFilter, false, $arNavParams, $arSelect);

чтоб можно было искать по искомому слову , который может присутствовать и в поле «NAME» и «DETAIL_TEXT»?

Следующая конструкция работает по правилу «И», а необходимо по правилу «ИЛИ»:
$arFilter = array(
	'NAME' => '%' . $text . '%',
	'DETAIL_TEXT' => '%' . $text . '%'
);
  • Вопрос задан
  • 476 просмотров
Решения вопроса 1
Параметр arFilter может содержать вложенные фильтры. Ключом массива вложенного фильтра должно быть число. Например:
$arFilter = array("NAME" => "A%", array(..<здесь пары "поле" => "фильтр">...), "IBLOCK_ID" => $IBLOCK_ID);

Вложенность фильтров теоретически не ограничена.
Так же условия фильтра могут объединяться не только по условию "И", но и "ИЛИ". Для этого в качестве фильтруемого поля надо указать "LOGIC". Может принимать два значения: "AND" и "OR". По умолчанию - "AND". Например выберем маленькие зрелые и большие не зрелые апельсины:
$arFilter = array(
    "IBLOCK_ID" => $IBLOCK_ID,
    "SECTION_CODE" => "orange",
    "INCLUDE_SUBSECTIONS" => "Y",
    array(
        "LOGIC" => "OR",
        array("<PROPERTY_RADIUS" => 50, "=PROPERTY_CONDITION" => "Y"),
        array(">=PROPERTY_RADIUS" => 50, "!=PROPERTY_CONDITION" => "Y"),
    ),
);

CIBlockElement::GetList()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы