1C-Битрикс: Управление сайтом

CIBlockElement::GetList(доступен с 3.0.8)

CIBlockResult
CIBlockElement::GetList(
 array arOrder = Array("SORT"=>"ASC"),
 array arFilter = Array(),
 mixed arGroupBy = false,
 mixed arNavStartParams = false,
 array arSelectFields = Array()
);

Возвращает список элементов по фильтру arFilter. Метод статический.

Примечания:
  1. Внутренние ограничения Oracle и MSSQL не позволяют использовать DISTINCT при фильтрации по полям типа blob, поэтому фильтрация по нескольким значениям множественного свойства может дать дублирование.  
  2. Поля перечисленные для сортировки будут автоматически добавлены в параметр arSelectFields или в arGroupBy, если указана группировка записей.

Параметры вызова

Параметр ОписаниеС версии
arOrder Массив вида Array(by1=>order1[, by2=>order2 [, ..]]), где by - поле для сортировки, может принимать значения:
  • id - ID элемента;
  • sort - индекс сортировки;
  • timestamp_x - дата изменения;
  • name - название;
  • active_from или date_active_from - начало периода действия элемента;
  • active_to или date_active_to - окончание периода действия элемента;
  • status - код статуса элемента в документообороте;
  • code - символьный код элемента;
  • iblock_id - числовой код информационного блока;
  • modified_by - код последнего изменившего пользователя;
  • active - признак активности элемента;
  • show_counter - количество показов элемента (учитывается методом CIBlockElement::CounterInc);
  • show_counter_start - время первого показа элемента (учитывается методом CIBlockElement::CounterInc);
  • shows - усредненное количество показов (количество показов / продолжительность показа);
  • rand - случайный порядок;
  • xml_id или external_id - внешний код;
  • tags - теги;
  • created - время создания;
  • created_date - дата создания без учета времени;
  • cnt - количество элементов (только при заданной группировке);
  • property_<PROPERTY_CODE> - по значению свойства с числовым или символьным кодом PROPERTY_CODE (например, PROPERTY_123 или PROPERTY_NEWS_SOURCE);
  • propertysort_<PROPERTY_CODE> - по индексу сортировки варианта значения свойства. Только для свойств типа "Список" ;
  • catalog_<CATALOG_FIELD>_<PRICE_TYPE> - по полю CATALOG_FIELD (может быть PRICE - цена или CURRENCY - валюта) из цены с типом PRICE_TYPE (например, catalog_PRICE_1 или CATALOG_CURRENCY_3). С версии 16.0.3 модуля Торговый каталог сортировка по цене также идет с учетом валюты.
  • IBLOCK_SECTION_ID - ID раздела;
  • CATALOG_QUANTITY - общее количество товара;
  • CATALOG_WEIGHT - вес товара;
  • CATALOG_AVAILABLE - признак доступности к покупке (Y|N). Товар считается недоступным, если его количество меньше либо равно нулю, включен количественный учет и запрещена покупка при нулевом количестве.
  • CATALOG_STORE_AMOUNT_<идентификатор_склада> - сортировка по количеству товара на конкретном складе (доступно с версии 15.5.5 модуля Торговый каталог).
  • CATALOG_PRICE_SCALE_<тип_цены> - сортировка по цене с учетом валюты (доступно с версии 16.0.3 модуля Торговый каталог).
  • CATALOG_BUNDLE - сортировка по наличию набора у товара (доступно с версии 16.0.3 модуля Торговый каталог).
  • PROPERTY_<PROPERTY_CODE>.<FIELD> - по значению поля элемента указанного в качестве привязки. PROPERTY_CODE - символьный код свойства типа привязка к элементам. FIELD может принимать значения:
    • ID
    • TIMESTAMP_X
    • MODIFIED_BY
    • CREATED
    • CREATED_DATE
    • CREATED_BY
    • IBLOCK_ID
    • ACTIVE
    • ACTIVE_FROM
    • ACTIVE_TO
    • SORT
    • NAME
    • SHOW_COUNTER
    • SHOW_COUNTER_START
    • CODE
    • TAGS
    • XML_ID
    • STATUS
  • PROPERTY_<PROPERTY_CODE>.PROPERTY_<PROPERTY_CODE2> - по значению свойства элемента указанного в качестве привязки. PROPERTY_CODE - символьный код свойства типа привязки к элементам. PROPERTY_CODE2- код свойства связанных элементов.
  • HAS_PREVIEW_PICTURE и HAS_DETAIL_PICTURE - сортировка по наличию и отсутствию картинок.
  • order - порядок сортировки, пишется без пробелов, может принимать значения:
    • asc - по возрастанию;
    • nulls,asc - по возрастанию с пустыми значениями в начале выборки;
    • asc,nulls - по возрастанию с пустыми значениями в конце выборки;
    • desc - по убыванию;
    • nulls,desc - по убыванию с пустыми значениями в начале выборки;
    • desc,nulls - по убыванию с пустыми значениями в конце выборки;
    Необязательный. По умолчанию равен Array("sort"=>"asc")
Примечание 1: если задать разным свойствам одинаковый символьный код, но в разном регистре, то при работе сортировки по одному из свойств (например, PROPERTY_rating) будет возникать ошибочная ситуация (элементы в списке задублируются, сортировки не будет).

Примечание 2: указанные поля сортировки автоматически добавляются в arGroupBy (если он задан) и arSelectFields.
arFilter Массив вида array("фильтруемое поле"=>"значения фильтра" [, ...]). "фильтруемое поле" может принимать значения:
  • ID - по числовому коду (фильтр Число);
  • ACTIVE - фильтр по активности (Y|N); передача пустого значения ("ACTIVE"=>"") выводит все элементы без учета их состояния (фильтр Строка);
  • NAME - по названию (фильтр Маска);
  • CODE - по символьному идентификатору (фильтр Маска);
  • TAGS - по тегам (фильтр Маска);
  • XML_ID или EXTERNAL_ID - по внешнему коду (фильтр Маска);
  • PREVIEW_TEXT - по анонсу (фильтр Маска);
  • PREVIEW_TEXT_TYPE - по типу анонса (html|text, фильтр Строка);
  • PREVIEW_PICTURE - коду картинки для анонса (фильтр Число);
  • DETAIL_TEXT - по детальному описанию (фильтр Маска);
  • DETAIL_TEXT_TYPE - по типу детальному описания (html|text, фильтр Строка);
  • DETAIL_PICTURE - по коду детальной картинки (фильтр Число);
  • CHECK_PERMISSIONS - если установлен в "Y", то в выборке будет осуществляться проверка прав доступа к информационным блокам. По умолчанию права доступа не проверяются.
  • MIN_PERMISSION - минимальный уровень доступа, будет обработан только если CHECK_PERMISSIONS установлен в "Y". По умолчанию "R". Список прав доступа см. в CIBlock::SetPermission().
  • SEARCHABLE_CONTENT - по содержимому для поиска. Включает в себя название, описание для анонса и детальное описание (фильтр Маска);
  • SORT - по сортировке (фильтр Число);
  • TIMESTAMP_X - по времени изменения (фильтр Дата);
  • DATE_MODIFY_FROM - по времени изменения. Будут выбраны элементы измененные после времени указанного в фильтре. Время указывается в формате сайта. Возможно использовать операцию отрицания "!DATE_MODIFY_FROM";
  • DATE_MODIFY_TO - по времени изменения. Будут выбраны элементы измененные ранее времени указанного в фильтре. Время указывается в формате сайта. Возможно использовать операцию отрицания "!DATE_MODIFY_TO";
  • MODIFIED_USER_ID или MODIFIED_BY - по коду пользователя, изменившего элемент (фильтр Число);
  • DATE_CREATE - по времени создания (фильтр Дата);
  • CREATED_USER_ID или CREATED_BY - по коду пользователя, добавившего элемент (фильтр Число);
  • DATE_ACTIVE_FROM - по дате начала активности (фильтр Дата) Формат даты должен соответствовать формату даты, установленному на сайте. Чтобы выбрать элементы с пустым полем начала активности, следует передать значение false;
  • DATE_ACTIVE_TO - по дате окончания активности (фильтр Дата)Формат даты должен соответствовать формату даты, установленному на сайте. Чтобы выбрать элементы с пустым полем окончания активности, следует передать значение false;
  • ACTIVE_DATE - непустое значение задействует фильтр по датам активности. Будут выбраны активные по датам элементы.Если значение не установлено (""), фильтрация по датам активности не производится;
    Чтобы выбрать все не активные по датам элементы, используется такой синтаксис:
    $el_Filter[ "!ACTIVE_DATE" ]= "Y";
  • ACTIVE_FROM - устаревший;
  • ACTIVE_TO - устаревший;
  • IBLOCK_ID - по коду информационного блока (фильтр Число);

    При использовании инфоблоков 1.0 можно в IBLOCK_ID передать массив идентификаторов, чтобы сделать выборку из элементов нескольких инфоблоков:
    $arFilter = array("IBLOCK_ID" => array(1, 2, 3), ...);
    Для инфоблоков 2.0 такая выборка будет работать только в том случае, если в ней не запрашиваются свойства элементов.

    В некоторых случаях точное указание IBLOCK_ID в фильтре может ускорить выборку элементов. Так как зависимости сложные, каждый конкретный случай надо рассматривать отдельно.

  • IBLOCK_CODE - по символьному коду информационного блока (фильтр Маска);
  • IBLOCK_SITE_ID или IBLOCK_LID или SITE_ID или LID - по сайту (фильтр Строка);
  • IBLOCK_TYPE - по типу информационного блока (фильтр Маска);
  • IBLOCK_ACTIVE - по активности информационного блока (Y|N, фильтр Строка);
  • SECTION_ID - по родительской группе. Если значение фильтра false, "" или 0, то будут выбраны элементы не привязанные ни к каким разделам. Иначе будут выбраны элементы привязанные к заданному разделу. Значением фильтра может быть и массив. В этом случае будут выбраны элементы привязанные хотя бы к одному из разделов указанных в фильтре. Возможно указание отрицания "!". В этом случае условие будет инвертировано;
  • SECTION_CODE - по символьному коду родительской группы. Аналогично SECTION_ID;
  • INCLUDE_SUBSECTIONS - если задан фильтр по родительским группам SECTION_ID, то будут также выбраны элементы находящиеся в подгруппах этих групп (имеет смысле только в том случае, если SECTION_ID > 0);
  • SUBSECTION  - по принадлежности к подразделам раздела. Значением фильтра может быть массив из двух элементов задающих левую и правую границу дерева разделов. Операция отрицания поддерживается.
  • SECTION_ACTIVE - если ключ есть в фильтре, то проверяется активность групп к которым привязан элемент.
  • SECTION_GLOBAL_ACTIVE - аналогично предыдущему, но учитывается также активность родительских групп.
  • SECTION_SCOPE - задает уточнение для фильтров SECTION_ACTIVE и SECTION_GLOBAL_ACTIVE. Если значение "IBLOCK", то учитываются только привязки к разделам инфоблока. Если значение "PROPERTY", то учитываются только привязки к разделам свойств. "PROPERTY_" - привязки к разделам конкретного свойства.
  • CATALOG_AVAILABLE - признак доступности к покупке (Y|N). Товар считается недоступным, если его количество меньше либо равно нулю, включен количественный учет и запрещена покупка при нулевом количестве;
  • CATALOG_CATALOG_GROUP_ID_N - по типу цен;
  • CATALOG_SHOP_QUANTITY_N - фильтрация по диапазону количества в цене;
  • CATALOG_QUANTITY - по общему количеству товара;
  • CATALOG_WEIGHT - по весу товара;
  • CATALOG_STORE_AMOUNT_<идентификатор_склада> - фильтрация по наличию товара на конкретном складе (доступно с версии 15.0.2 модуля Торговый каталог). В качестве значения фильтр принимает количество товара на складе либо false.
  • CATALOG_PRICE_SCALE_<тип_цены> - фильтрация по цене с учетом валюты (доступно с версии 16.0.3 модуля Торговый каталог).
  • CATALOG_BUNDLE - фильтрация по наличию набора у товара (доступно с версии 16.0.3 модуля Торговый каталог).
  • SHOW_COUNTER - по количеству показов (фильтр Число);
  • SHOW_COUNTER_START - по времени первого показа (фильтр Дата);
  • WF_COMMENTS - по комментарию документооборота (фильтр Маска);
  • WF_STATUS_ID или WF_STATUS - по коду статуса документооборота (фильтр Число);
  • SHOW_HISTORY - если установлен в значение "Y", то вместе с элементами будут выводится и их архив (история), по умолчанию выводятся только опубликованные элементы. Для фильтрации по WF_STATUS_ID SHOW_HISTORY должен стоять в "Y".
  • SHOW_NEW - если SHOW_HISTORY не установлен или не равен Y и SHOW_NEW=Y, то будут показываться ещё неопубликованные элементы вместе с опубликованными;
  • WF_PARENT_ELEMENT_ID - по коду элемента-родителя в документообороте для выборки истории изменений (фильтр Число);
  • WF_NEW - флаг что элемент ещё ни разу не был опубликован (Y|N);
  • WF_LOCK_STATUS - статус заблокированности элемента в документооборте (red|green|yellow);
  • PROPERTY_<PROPERTY_CODE> - фильтр по значениям свойств, где PROPERTY_CODE - код свойства или символьный код. Для свойств типа "Список", "Число", "Привязка к элементам" и "Привязка к разделам"  - фильтр Число. Для прочих - фильтр Маска;
  • PROPERTY_<PROPERTY_CODE>_VALUE - фильтр по значениям списка для свойств типа "список" (фильтр Маска), поиск будет осуществляться по строковому значению списка, а не по идентификатору;
  • CATALOG_<CATALOG_FIELD>_<PRICE_TYPE> - по полю CATALOG_FIELD из цены типа PRICE_TYPE (ID типа цены), где CATALOG_FIELD может быть: PRICE - цена, CURRENCY - валюта.
  • PROPERTY_<PROPERTY_CODE>.<FIELD> - фильтр по значениям полей связанных элементов. , где PROPERTY_CODE - ID или символьный код свойства привязки, а FIELD - поле указанного в привязке элемента. FIELD может принимать следующие значения: ACTIVE, DETAIL_TEXT_TYPE, PREVIEW_TEXT_TYPE, EXTERNAL_ID, NAME, XML_ID, TMP_ID, DETAIL_TEXT, SEARCHABLE_CONTENT, PREVIEW_TEXT, CODE, TAGS, WF_COMMENTS, ID, SHOW_COUNTER, WF_PARENT_ELEMENT_ID, WF_STATUS_ID, SORT, CREATED_BY, PREVIEW_PICTURE, DETAIL_PICTURE, IBLOCK_ID, TIMESTAMP_X, DATE_CREATE, SHOW_COUNTER_START, DATE_ACTIVE_FROM, DATE_ACTIVE_TO, ACTIVE_FROM, ACTIVE_TO, ACTIVE_DATE, DATE_MODIFY_FROM, DATE_MODIFY_TO, MODIFIED_USER_ID, MODIFIED_BY, CREATED_USER_ID, CREATED_BY. Правила фильтров идентичны тем, которые описаны выше.
Перед названием фильтруемого поля можно указать тип проверки фильтра:
  • "!" - не равно
  • "<" - меньше
  • "<=" - меньше либо равно
  • ">" - больше
  • ">=" - больше либо равно
  • "><" - между
  • и т.д.
Значения фильтра - одиночное значение или массив значений. Для исключения пустых значений необходимо использовать false.

Необязательное. По умолчанию записи не фильтруются.
Примечание 1: (по настройке фильтра для свойства типа "Дата/Время"): свойство типа Дата/Время хранится как строковое с датой в формате YYYY-MM-DD HH:MI:SS. Соответственно сортировка по значению такого свойства будет работать корректно, а вот значение для фильтрации формируется примерно так: $cat_filter[">"."PROPERTY_available"] = date("Y-m-d");

Примечание 2: при использовании типа проверки фильтра "><" для целых чисел, заканчивающихся нулем, необходимо использовать тип поля число или разделительный знак "," для десятичных значений (например, 20000,00). Иначе работает не корректно.
arGroupBy Массив полей для группировки элемента. Если поля указаны, то выборка по ним группируется (при этом параметр arSelectFields будет проигнорирован), а в результат добавляется поле CNT - количество сгруппированных элементов. Если указать в качестве arGroupBy пустой массив, то метод вернет количество элементов CNT по фильтру. Группировать можно по полям элемента, а также по значениям его свойств. Для этого в качестве одного из полей группировки необходимо указать PROPERTY_<PROPERTY_CODE>, где PROPERTY_CODE - ID или символьный код свойства.
Необязательное. По умолчанию false - записи не группируются.
3.2.1
arNavStartParams Параметры для постраничной навигации и ограничения количества выводимых элементов. массив вида "Название параметра"=>"Значение", где название параметра
"nTopCount" - ограничить количество сверху
"bShowAll" - разрешить вывести все элементы при постраничной навигации
"iNumPage" - номер страницы при постраничной навигации
"nPageSize" - количество элементов на странице при постраничной навигации
"nElementID" - ID элемента который будет выбран вместе со своими соседями. Количество соседей определяется параметром nPageSize. Например: если nPageSize равно 2-м, то будут выбраны максимум 5-ть элементов.  Соседи определяются порядком сортировки заданным в параметре arOrder (см. выше) .
При этом действуют следующие ограничения:
  • Если элемент с таким ID отсутствует в выборке, то результат будет не определен.
  • nElementID не работает, если задана группировка (см. параметр arGroupBy выше).
  • в параметре arSelect обязательно должено присутствовать поле "ID".
  • обязательно должна быть задана сортировка arOrder.
  • поля в сортировке catalog_* не учитываются и результат выборки становится не определенным.
  • в выборку добавляется поле RANK - порядковый номер элемента в "полной" выборке.
Необязательное. По умолчанию false - не ограничивать выводимые элементы.
Если передать в параметр arNavStartParams пустой массив, то ставится ограничение на 10 выводимых элементов.
3.2.1
arSelectFields Массив возвращаемых полей элемента. Список полей элемента, а также можно сразу выводить значения его свойств. Обязательно должно быть использованы поля IBLOCK_ID и ID, иначе не будет работать корректно. Кроме того, также  в качестве одного из полей необходимо указать PROPERTY_<PROPERTY_CODE>, где PROPERTY_CODE - ID или символьный код (задается в верхнем регистре, даже если в определении свойств инфоблока он указан в нижнем регистре). В результате будет выведены значения свойств элемента в виде полей PROPERTY_<PROPERTY_CODE>_VALUE - значение; PROPERTY_<PROPERTY_CODE>_ID - код значения у элемента; PROPERTY_<PROPERTY_CODE>_ENUM_ID - код значения (для свойств типа список).
При установленном модуле торгового каталога можно выводить и цены элемента. Для этого в качестве одного из полей необходимо указать CATALOG_GROUP_<PRICE_CODE>, где PRICE_CODE - ID типа цены.
Так же есть возможность выбрать поля элементов по значениям свойства типа "Привязка к элементам". Для этого необходимо указать  PROPERTY_<PROPERTY_CODE>.<FIELD>, где PROPERTY_CODE - ID или символьный код свойства привязки, а FIELD - поле указанного в привязке элемента. См. ниже "Поля связанных элементов для сортировки".
Можно выбрать и значения свойств элементов по значениям свойства типа "Привязка к элементам". Для этого необходимо указать  PROPERTY_<PROPERTY_CODE>.PROPERTY_<PROPERTY_CODE2>, где PROPERTY_CODE - ID или символьный код свойства привязки, а PROPERTY_CODE2 - свойство указанного в привязке элемента.

По умолчанию выводить все поля. Значения параметра игнорируются, если используется параметр группировки arGroupBy.
Примечание 1: если в массиве используются свойство, являющееся множественным, то для элементов, где используются несколько значений этого свойства, будет возвращено несколько записей вместо одной. Для решения этой проблемы инфоблоки нужно перевести в Режим хранения свойств в отдельных таблицах, в этом случае для свойства будет отдаваться массив значений. Либо можно не указывать свойства в параметрах выборки, а получать их значения на каждом шаге перебора выборки с помощью _CIBElement::GetProperties().

Примечание 2: Если в массиве указаны поля DETAIL_PAGE_URL, SECTION_PAGE_URL или LIST_PAGE_URL, то поля необходимые для правильной подстановки шаблонов URL'ов будут выбраны автоматически. Но только если не была задана группировка.

Примечание 3: если необходимо выбрать данные о рейтингах для выбранных элементов, то для этого в массиве необходимо указать следующие поля: RATING_TOTAL_VALUE, RATING_TOTAL_VOTES, RATING_TOTAL_POSITIVE_VOTES, RATING_TOTAL_NEGATIVE_VOTES, RATING_USER_VOTE_VALUE.
3.2.1

Рассмотрим несколько частных случаев фильтрации:

  • $arFilter = array("PROPERTY_CML2_SCAN_CODE") =>false - используется, чтобы выбрать все элементы с незаполненными свойствами;
  • $arFilter = array("PROPERTY_CML2_SCAN_CODE") =>"" - используется, чтобы выбрать все элементы; 
  • $arFilter = array("PROPERTY_CML2_SCAN_CODE") =>qwe - при фильтрации элементов проверяется точное совпадение с заданными свойствами;
  • $arFilter = array("?PROPERTY_CML2_SCAN_CODE") =>we" - при фильтрации элементов проверяется наличие заданной подстроки свойствах.
  • $arFilter = array("!PROPERTY_CML2_SCAN_CODE") =>false - используется, чтобы выбрать только элементы с заполненными свойствами;
  • $arFilter = array("!PROPERTY_CML2_SCAN_CODE") =>qwe - при фильтрации элементов проверяется точное совпадение с заданными свойствами;
  • $arFilter = array("!?PROPERTY_CML2_SCAN_CODE") =>we - при фильтрации элементов проверяется наличие заданной подстроки свойствах.

Фильтр со сложной логикой

Параметр 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"),
),
);

В этом примере фильтр по свойствам апельсинов является подфильтром инфоблока фруктов.

Поля связанных элементов

  • ID - числовой идентификатор элемента;
  • TIMESTAMP_X - время последней модификации в полном формате сайта;
  • MODIFIED_BY - идентификатор пользователя вносившего последние правки;
  • DATE_CREATE - время создания элемента в полном формате сайта
  • CREATED_BY - идентификатор пользователя создавшего элемент;
  • IBLOCK_ID - числовой идентификатор инфоблока элемента;
  • ACTIVE - активность (Y|N);
  • ACTIVE_FROM - начало активности в полном формате сайта;
  • ACTIVE_TO - окончание активности в полном формате сайта;
  • SORT - значение сортировки;
  • NAME - имя элемента;
  • PREVIEW_PICTURE - идентификатор изображения;
  • PREVIEW_TEXT - текст анонса;
  • PREVIEW_TEXT_TYPE - тип текста анонса (html|text);
  • DETAIL_PICTURE - идентификатор изображения;
  • DETAIL_TEXT - детальное описание;
  • DETAIL_TEXT_TYPE - тип детального описания (html|text);
  • SHOW_COUNTER - счетчик показов;
  • SHOW_COUNTER_START - время первого показа элемента в полном формате сайта;
  • CODE - символьный код элемента;
  • TAGS - теги;
  • XML_ID - внешний идентификатор;
  • IBLOCK_SECTION_ID - минимальный идентификатор раздела элемента (если задан);
Дополнительно присоединяется таблица инфоблоков:
  • IBLOCK_TYPE_ID - идентификатор типа инфоблока;
  • IBLOCK_CODE - символьный код инфоблока;
  • IBLOCK_NAME - название инфоблока;
  • IBLOCK_EXTERNAL_ID - внешний код инфоблока;
  • DETAIL_PAGE_URL - путь к элементу;
  • LIST_PAGE_URL - путь к списку элементов;

Возвращаемое значение

Возвращается объект CIBlockResult.

См. также

  • CDBResult
  • Поля элементов

  • Примеры использования

    Пример 1:

    <?
    $arSelect = Array("ID", "NAME", "DATE_ACTIVE_FROM");
    $arFilter = Array("IBLOCK_ID"=>IntVal($yvalue), "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");
    $res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>50), $arSelect);
    while($ob = $res->GetNextElement())
    {
     $arFields = $ob->GetFields();
     print_r($arFields);
    }
    ?> 

    Пример можно модернизировать, добавив вывод свойств для каждого элемента. Удобно использовать, не прибегая к GetPropery. В случае использования Инфоблоков 2.0 необходимо в $arSelect добавить IBLOCK_ID.

    <?
    $arSelect = Array("ID", "IBLOCK_ID", "NAME", "DATE_ACTIVE_FROM","PROPERTY_*");//IBLOCK_ID и ID обязательно должны быть указаны, см. описание arSelectFields выше
    $arFilter = Array("IBLOCK_ID"=>IntVal($yvalue), "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");
    $res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>50), $arSelect);
    while($ob = $res->GetNextElement()){ 
     $arFields = $ob->GetFields();  
    print_r($arFields);
     $arProps = $ob->GetProperties();
    print_r($arProps);
    }
    ?>
    

    Пример 2:

    <?
    // выборка активных элементов из информационного блока $yvalue, 
    // у которых установлено значение свойства с символьным кодом SRC 
    // и дата начала автивности старше 1 января 2003 года
    // выбранные элементы будут сгруппированы по дате активности
    $arFilter = Array(
     "IBLOCK_ID"=>IntVal($yvalue), 
     ">DATE_ACTIVE_FROM"=>date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT")), mktime(0,0,0,1,1,2003)), 
     "ACTIVE"=>"Y", 
     "!PROPERTY_SRC"=>false
     );
    $res = CIBlockElement::GetList(Array("SORT"=>"ASC", "PROPERTY_PRIORITY"=>"ASC"), $arFilter, Array("DATE_ACTIVE_FROM"));
    while($ar_fields = $res->GetNext())
    {
     echo $ar_fields["DATE_ACTIVE_FROM"].": ".$ar_fields["CNT"]."<br>";
    }
    ?> 

    Пример 3:

    //вывод архива из просроченных элементов (news.list) 
    $arFilter = array(
       "IBLOCK_ID" => $arResult["ID"],
       "IBLOCK_LID" => SITE_ID,
       "ACTIVE" => "Y",
       "CHECK_PERMISSIONS" => "Y", //сильно грузит систему, но проверяет права
       " DateFormatToPHP(CLang::GetDateFormat("SHORT")), ); 

    Пример 4:

    //выборка элементов инфоблока, чтобы в возвращаемом результате находилось 5 случайных элементов
    $rs = CIBlockElement::GetList (
       Array("RAND" => "ASC"),
       Array("IBLOCK_ID" => $IBLOCK_ID),
       false,
       Array ("nTopCount" => 5)
    );
    

    Пример 5:

    //для фильтрации по нескольким значениям множественного свойства, нужно использовать подзапросы. 
    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>';
    }
    

    Пример 6:

    //следующий и предыдущий товар с учетом сортировки в подробном просмотре
     $arrSortAlown = array('price'=> 'catalog_PRICE_1' , 'name'=> 'NAME', 'rating' => 'PROPERTY_RATING' , 'artnumber'=> 'PROPERTY_ARTNUMBER');
    
       $_sort = isset($arrSortAlown[$_GET['sort']]) ? $arrSortAlown[$_GET['sort']] : 'NAME';
       $_order = isset($_GET['order']) && $_GET['order']=='desc' ? 'DESC' : 'ASC';
    
       $sort_url = 'sort=' .( isset($_GET['sort'])? $_GET['sort'] : 'name')
                            .'&order='. (isset($_GET['order'])? $_GET['order'] : 'asc');
       
       
       $res = CIBlockElement::GetList(
          array("$_sort" => $_order),
          Array(
             "IBLOCK_ID"=>$arResult["IBLOCK_ID"], 
             "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y" , 
             "IBLOCK_SECTION_ID" => 
             $arResult["IBLOCK_SECTION_ID"]
          ),
          false, 
          array("nPageSize" => "1","nElementID" => $arResult["ID"]), 
          array_merge(Array("ID", "NAME","DETAIL_PAGE_URL"), array_values($arrSortAlown)) 
       );
       $navElement = array();
       while($ob = $res->GetNext()){
         $navElement[] = $ob;
       }
    
    //вывод:
    <noindex>
    <div class="navElement" style="float:right; clear:both;">
       <span class="l">
          <small><a href="<?=$navElement[0]['DETAIL_PAGE_URL']?>?<?=$sort_url?>">Предыдущий товар</a></small>
       </span>  
       <span class="r">
          <small><a href="<?=$navElement[2]['DETAIL_PAGE_URL']?>?<?=$sort_url?>">Следующий товар</a></small>
       </span>
    </div>
    </noindex>
    

    Пример 7:

    //вывод ненаступивших и, следовательно, неактивных анонсов событий без правки компонента
    // в компоненте указываем имя фильтра, а сам фильтр добавляем перед компонентом:
    <?
        $arrFilter=Array(array(
            "LOGIC" => "OR",
            array("DATE_ACTIVE_TO"=>false),
            array(">DATE_ACTIVE_TO"=>ConvertTimeStamp(time(),"FULL"))
            
        ));
      ?>  
    


    Пользовательские комментарии

    Пользовательские комментарии не являются официальной документацией. Ответственность за их использование несет сам пользователь.

    Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.

    Добавлять комментарии могут только зарегистрированные пользователи. Сообщения для просмотра появляются после модерации.
    Страницы: 1 2 След.
    3
    Андрей Кобяк
    вывести элементы с непустым значением множественного свойства типа список

    Код
    ${$FILTER_NAME}[]=array(
                            "ID" => CIBlockElement::SubQuery("ID", array(
                                    "IBLOCK_ID" => $arParams['IBLOCK_ID'],
                                    "!=PROPERTY_".$arProp["CODE"] => false
                                ))
                        );
    4
    Александр Водолазский
    В версии БУС 12.5 возникла проблема: нужно выбрать элементы, исходя из значения XML_ID у свойства типа список.
    Стандартный параметр для фильтра не работает, т.е. например:
    Код
     $arFilter = Array("IBLOCK_ID"=>$ib_id, "ACTIVE"=>"Y", "SECTION_ID"=>$sec_id, "=PROPERTY_MODEL_SEASON.XML_ID"=>$season_xml_id);
    не срабатывает.
    Из старого поста на форуме битрикса выяснилось, что это можно (а раньше и нужно было) сделать через дополнительный запрос. Однако, по указанному примеру сделать не получилось.
    В результате поиска было установлено, что отфильтровать можно следующим способом:
    Код
    $property_enums = CIBlockPropertyEnum::GetList(Array("SORT"=>"ASC"), Array("IBLOCK_ID"=>$ib_id, "XML_ID"=>$season_xml_id) ) );
    if($enum_fields = $property_enums->GetNext())
    {
       $arFilter = Array("IBLOCK_ID"=>$ib_id, "ACTIVE"=>"Y", "SECTION_ID"=>$sec_id, "PROPERTY_MODEL_SEASON"=>$enum_fields["ID"] );
       $res = CIBlockElement::GetList(Array("ID"=>"ASC"), $arFilter, false, Array("nTopCount"=>5), $arSelect);
          while($ob = $res->GetNextElement())
          {
             // обрабатываем элементы
       }
    }
    
    
    1
    Кирилл Дербенев
    Организация поиска по каталогу с помощью поля SEARCHEBLE_CONTENT

    Код
    <?
    CModule::IncludeModule('iblock'); 
    $IBLOCK_ID = intval($_REQUEST['IBLOCK_ID']); 
    $QUERY = trim($_REQUEST['q']); 
    if($QUERY) { 
       $arSelect = Array("ID", "NAME", "DATE_ACTIVE_FROM", "DETAIL_PAGE_URL", "PREVIEW_PICTURE";  
       $arFilter = Array("IBLOCK_ID"=>$IBLOCK_ID, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y", "SEARCHABLE_CONTENT"=>'%'.$_REQUEST['q'].'%');  
       $res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>50), $arSelect);  
       while($ob = $res->GetNextElement())  
       {  
              $arFields = $ob->GetFields();  
          print_r($arFields);    
       }     
    }
    ?>
    0
    Алексей Попович
    пример LOGIC:

    Задача: Вывести все элементы инфоблока, у которых совпадают пары производитель + артикул.

    Код
    $arFilter = Array("IBLOCK_TYPE"=>$arParams['IBLOCK_TYPE'], "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");  
    $arrayMasAnalogs = array("LOGIC" => "OR");
    foreach ($mas_analogs as $arAnalog) {
            $arrayMasAnalogs[] = array(
                'LOGIC'=>'AND',
                array('PROPERTY_ECH_PRODUCER.NAME'=>$arAnalog['SUP_BRAND'],
                    'PROPERTY_ECH_CODE'=>$arAnalog['ART_ARTICLE_NR'])
            );
        }
     $arFilter[] = $arrayMasAnalogs;
    Код
    PROPERTY_ECH_PRODUCER  - свойство типа "привязка к элементу инфоблока". Производителя ищем по его названию. 
    
    Код
    PROPERTY_ECH_CODE  - свойство типа "строка".
    Первой строкой задаем обычный фильтр (в моем случае фильтрация по конкретному инфоблоку заменена на фильтрацию по типу инфоблока)
    Вторая строка говорит о том, что дальше пойдет условие "ИЛИ"
    Далее в массиве перебираем все пары значений Производитель + Артикул.

    Обратите особое внимание, что каждый блок для "ИЛИ" - это массив, А т.к. внутри "ИЛИ" размещается еще и условие "И", то содержимое условия "И" - также вложенный массив. К стати, строку #5 можно опустить -. это значение по умолчанию.

    В результате получаем примерно такую структуру:
    ....
    ИЛИ{
    {И{бренд,артикул}}
    {И{бренд,артикул}}
    }
    1
    Эльдар Рахимбердин
    Отрицание в фильтре SECTION_ID не будет работать, если элементы привязаны к нескольким разделам.

    Пример:
    Элемент привязан к разделам 1, 2, 3.

    Выбрать элементы с фильтром
    Код
    "!SECTION_ID" => 2
    Вернет элемент.


    Выбрать элементы с фильтром
    Код
    "!SECTION_ID" => [1, 2, 3]
    Не вернет элемент.
    4
    Дмитрий Ипатов
    Для фильтрации по Дате например с 12.09.2014 по 18.09.2014 включительно фильтр будет выглядеть следующим образом:

    Код
    $date_from = '12.09.2014';
    $date_to = '18.09.2014';
    
    $db_el = CIBlockElement::GetList(
       array('ID' => 'DESC'),
       array(
          '>=DATE_CREATE' => $date_from,
          '<=DATE_CREATE' => $date_to . ' 23:59:59'      
       )
    );
    5
    Алексей Попович
    Если у элемента установлена привязка к нескольким разделам, то функция возвращает только один из этих разделов. Для того, чтобы получить все разделы, к которым привязан элемент, нужно в цикле перебора элементов вызывать функцию
    CIBlockElement::GetElementGroups
    1
    Алексей Попович
    Для подсчета количества элементов, полученных в результате выборке GetList, существует специальная функция:

    Код
    $res = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelect);
    $res->SelectedRowsCount()
    *******************
    Комментарий от разработчика: некорректно работает для Oracle и MSSQL
    2
    Алексей Попович
    выборка по свойству типа "Дата/время" по точному совпадению:

    Код
    'PROPERTY_DATE'=>date('Y-m-d H:i:s',mktime($arEventDate['HH'], $arEventDate['MI'], $arEventDate['SS'], $arEventDate['MM'], $arEventDate['DD'], $arEventDate['YYYY']));  
    
    Обратите внимание на формат. он должен быть именно:
    Цитата
    YYYY-MM-DD HH:MI:SS
    ну и, если секунды у вас не заданы - тогда смотрите примеры выше, там где больше-равно начала дня и меньше-равно окончания дня
    0
    Федор Майоров
    Для ключа CATALOG_STORE_AMOUNT_<идентификатор_склада> значением является требуемое значение товара, например:
    Код
    $arFilter = Array("IBLOCK_ID"=>IntVal($yvalue), "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y", ">CATALOG_STORE_AMOUNT_3"=>0); 
    Для выборки товаров, доступных на складе с ID = 3
    Страницы: 1 2 След.
    © «Битрикс», 2001-2016, «1C-Битрикс», 2016