Вход Регистрация
*— обязательные для заполнения поля
Войти через социальные сети

[Битрикс, Инфоблоки] Множественный фильтр по нескольким значениям списка

Сегодня научимся пользоваться множественным фильтром по нескольким значениям списка в инфоблоках 1С Битрикс.

Рассмотрим это на примере конкретной задачи: Отфильтровать и вывести все элементы, у которых не задано значение "Инструмент для бригадира".
Отфильтровать все элементы, у которых не задано значение

Свойство инфоблока CONTRACTOR_GROUP типа список + множественное свойство (вот здесь есть особенность)
Свойство инфоблока CONTRACTOR_GROUP типа список и множественное

В документации для СIBlockElement::GetList()  будет предложено несколько вариантов фильтрации, самое первое, что приходит в голову.

'!PROPERTY_CONTRACTOR_GROUP_VALUE' => 'Инструмент для бригадира',
или
'!=PROPERTY_CONTRACTOR_GROUP' => 131,
или
'!PROPERTY_CONTRACTOR_GROUP' => array(131),

Но рабочим без ошибок будет только вариант с подзапросами  Пример №5

//Пример 5: для фильтрации по нескольким значениям множественного свойства, нужно использовать подзапросы.
if(CModule::IncludeModule("iblock")){
  $rs = CIBlockElement::GetList(
     array(),
     array(
     "IBLOCK_ID" => 21,
     array("ID" => CIBlockElement::SubQuery("ID", array("IBLOCK_ID" => 21, "PROPERTY_PKE" => 7405))),
     array("ID" => CIBlockElement::SubQuery("ID", array("IBLOCK_ID" => 21, "PROPERTY_PKE" => 7410))),
     array("ID" => CIBlockElement::SubQuery("ID", array("IBLOCK_ID" => 21, "PROPERTY_PKE" => 7417)))
     ),
     false,
     false,
     array("ID")
  );
  while($ar = $rs->GetNext()) {
      echo "<pre>"; print_r($ar); echo "</pre>";
  }
}

Я не словил ошибку, когда у элемента было задано всего одно значение свойства и фильтр выглядел так, он работал.

'!PROPERTY_CONTRACTOR_GROUP_VALUE' => 'Инструмент для бригадира',

А когда задал несколько значений, то ошибка проявилась, итоговый пример рабочего фильтра.

use \Bitrix\Main\Loader;
use \Bitrix\Main\Localization\Loc;
require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
if(Loader::includeModule("iblock")) {
    $filter = array(
         "IBLOCK_ID" => 49,
         array("!ID" => \CIBlockElement::SubQuery("ID", array("IBLOCK_ID" => 49, "PROPERTY_CONTRACTOR_GROUP" => 131))),
    );
    $rsElement = CIBlockElement::GetList(false,$filter);
    while($row = $rsElement->Fetch()) {
        echo "<pre>";
        print_r($row["ID"] . ": ". $row["NAME"]);
        echo "</pre>";
    }
}

49 - это айди инфоблока

131 - этой айди значения свойства "Инструмент для бригадира", его надо исключить отрицанием !ID

Айди значения свойства

Комментарии
ЗОЖ
Комментарии
Последние комментарии
А на верстку влияют вот эти стили, можете перебить в css шаблона сайта. [url=https://s.mail.ru/L72s/...
Проверьте настройки компонента для формы, там поле Комментарий не выводится и оно наверно еще задано...
Проблема с VARCHAR (255) оказывается только в версии MariaDB 10.1, возможно и ниже, с ...
Возникли проблемы с модулем: TS Умные отзывы Разместили на сайте, на карточке товара, пример: https:...
Здравствуйте! Как-то я проглядел ваш вопрос, пока такой возможности нет, но планировал выгрузку в E...
Я с февраля с Яндексом веду телефонную борьбу. Магазин поменял адрес в пределах города, поменял на г...
Конвертация валют пока еще не работает, модуль практически весь переписан, это остается еще сделать,...
Подписка
Выберите рассылку