- Работа с элементами инфоблоков в Битрикс D7
- Работа с элементом как с массивом
- Работа с элементом как с объектом
- Разделы элементов
- Свойства элементов
- Кеширование
- GetIBlockElement
- Описание и параметры
- Параметры функции
- Возвращаемое значение
- Смотрите также
- Примеры использования
- Пользовательские комментарии
- GetList
- Описание
- Смотрите также
- Параметры вызова
- Частные случаи
- Фильтр со сложной логикой
- Поля связанных элементов
- Возвращаемое значение
- Примеры использования
- Пользовательские комментарии
Работа с элементами инфоблоков в Битрикс D7
В 20 версии Битрикс спустя несколько лет после появления ядра D7, призванного превратить Битрикс в современный фреймворк (нет), появилась возможность хоть как-то удобно использовать новое ядро для работы с элементами инфоблоков и их свойствами.
Примеры протестированы на версии 1С-Битрикс: Управление сайтом 20.0.1196. Кстати, не забываем подключить модуль iblock:
Для доступа к возможностям нового ядра у инфоблока нужно задать так называемый Символьный код API. По документации это строка от 1 до 50 символов, начинающаяся с буквы и состоящая из латинских букв и цифр.
Для работы с элементами используется класс \Bitrix\Iblock\Elements\ElementXXXXXTable, где XXXXX — Символьный код API. Для инфоблока на примере выше это будет класс \Bitrix\Iblock\Elements\ElementCatalogTable . Получить название класса для инфоблока можно следующим методом:
Работа с элементом как с массивом
Разберем различные примеры получения элементов. Простейший пример — это аналог CIBlockElement::GetByID:
Да, указывается код свойства без префикса «PROPERTY». Правда здесь выходит какое-то безумное именование ключей. Немного получше можно сделать с помощью алиасов:
Аналогом CIBlockElement::GetList будет getList из D7:
Подробнее рассматривать работу с массивом не буду. Массив всегда можно вывести и посмотреть содержимое. А вот с объектами посложнее, ниже буду рассматривать работу как с объектом. Заменив fetchCollection на fetchAll, а fetchObject на fetchRow можно получить массив полей элемента и вывести то, что получилось. Для удобства именования можно использовать алиасы в select.
Работа с элементом как с объектом
Есть возможность работать с элементами инфоблока как с объектами. Для этого используем методы fetchObject для получения объекта (один элемент) и fetchCollection для получения коллекции объектов (выборка).
Пример для одного элемента:
Пример для нескольких элементов:
Как видим, для получения значений полей используются методы getXyz, например, getName для получения NAME. Используется CamelCase, т.е. для получения например DETAIL_PICTURE используется метод getDetailPicture. Также поля можно получить методом get:
Разделы элементов
Напомню, что элементы могут быть привязаны к нескольким разделам, но GetList-ом можно было получить только один основной раздел инфоблока. Приведу пример аналогичного поведения в новом ядре:
Для получения всех разделов элемента используем поле SECTIONS, так у нас появляется возможность получения коллекции разделов. Получить значения коллекции можно с помощью метода getAll():
Свойства элементов
Свойства можно получить методом getXyz, где Xyz — CamelCased-код свойства. У свойств есть VALUE и DESCRIPTION, которые можно получить методами getValue и getDescription соответственно. Для некоторых типов добавляются дополнительные поля для доступа к дополнительной информации (ITEM — значение свойства типа список, ELEMENT — привязанный элемент, SECTION — привязанный раздел, FILE — файл).
Начнем с простого: свойства типа Текст или Число:
Если для свойства включен вывод описания, то его можно получить методом getDescription.
Если свойство множественное, то getSomePropertyCode() вернет коллекцию. Получить значения коллекции также можно с помощью метода getAll(). Рассмотрим на примере множественного свойства типа Справочник:
Заметили, что получение множественных свойств не создает проблем с дублированием строк, как при одном?
Переходим в свойствам типа Файл. К значениям таких свойств можно привязать информацию из таблицы товаров и получить не только ID файлов, но информацию о файле. Рассмотрим на примере свойства с 2 картинками. Обратите внимание на добавленное к коду свойства слово FILE:
Со свойства типа Список традиционно всё немного сложнее. Получить просто ID значения достаточно просто:
Если требуется получить ID, XML_ID и значение, то используем ITEM после код свойства, тогда к запросу добавится таблица значений списочных свойств:
У свойств типов Привязка к элементам и Привязка к разделам есть подобное дополнительное поле (ELEMENT/SECTION) для доступа к элементу/разделу:
Кеширование
Не забываем про возможность кеширование результатов выборок ORM D7:
Источник
GetIBlockElement
Описание и параметры
Функция возвращает информационный элемент с кодом ID. Функция-помошник, которая выбирает все базовые поля элемента, его свойства и информацию об инфоблоке. Использует GetList.
Параметры функции
Параметр | Описание |
---|---|
ID | ID элемента. |
type | Тип информационного блока. Устанавливается в настройках модуля. Если задан, то при выборке проверяется чтобы элемент соответствовал этому типу. Необязательный. По умолчанию на элемент не накладываются ограничения по типу. |
Возвращаемое значение
Функция возвращает массив полей информационного элемента и дополнительно следующие поля:
Поле | Значение |
---|---|
IBLOCK_NAME | Название информационного блока. |
PROPERTIES | Массив значений свойств, имеющий в качестве индексов «Символьный код свойства» (задается в настройках информационного блока) или, если код не задан, то уникальное ID свойства. Значением каждого свойства будет массив вида: |
Если заданным параметрам не найден элемент, функция вернет false.
Выборка элемента происходит только из активных элементов инфоблока, неактивный элемент выбран быть не может.
Смотрите также
Примеры использования
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.
Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
Источник
GetList
Описание
Возвращает список элементов по фильтру arFilter. Метод статический.
Важно! Начиная с версии 18.6.200 модуля Информационные блоки, в методе доступны новые возможности работы с товарами, изменены ключи метода. Читайте подробности в уроке Товары и CIBlockElement::GetList. Соответственно, все параметры вида CATALOG_*** устарели.
Внимание: Начиная с версии 20.5.0 модуля Информационные блоки в методе более не обрабатываются ключи CHECK_BP_TASKS_PERMISSIONS и TASKSTATUS.
Смотрите также
Параметры вызова
Параметр | Описание | С версии |
---|---|---|
arOrder | Массив вида Array(by1=>order1[, by2=>order2 [, ..]]), где by — поле для сортировки, может принимать значения:
|
— по значению свойства с числовым или символьным кодом PROPERTY_CODE (например, PROPERTY_123 или PROPERTY_NEWS_SOURCE);
propertysort_
— по индексу сортировки варианта значения свойства. Только для свойств типа «Список» ;
catalog_ _
— по полю CATALOG_FIELD (может быть PRICE — цена, CURRENCY — валюта или PRICE_SCALE — цена с учетом валюты) из цены с типом PRICE_TYPE (например, catalog_PRICE_1 или CATALOG_CURRENCY_3). С версии 16.0.3 модуля Торговый каталог сортировка по цене также идет с учетом валюты.
. — по значению поля элемента указанного в качестве привязки. 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_CODE2 > — по значению свойства элемента указанного в качестве привязки. PROPERTY_CODE — символьный код свойства типа привязки к элементам. PROPERTY_CODE2- код свойства связанных элементов.
- asc — по возрастанию;
- nulls,asc — по возрастанию с пустыми значениями в начале выборки;
- asc,nulls — по возрастанию с пустыми значениями в конце выборки;
- desc — по убыванию;
- nulls,desc — по убыванию с пустыми значениями в начале выборки;
- desc,nulls — по убыванию с пустыми значениями в конце выборки;
Необязательный. По умолчанию равен Array(«sort»=>»asc»)
— по ценам торговых предложений. —>
- ID — по числовому коду (фильтр Число);
- ACTIVE — фильтр по активности (Y|N); передача пустого значения («ACTIVE»=>»») выводит все элементы без учета их состояния (фильтр Строка);
- NAME — по названию (фильтр Маска);
- CODE — по символьному идентификатору (фильтр Маска);
- IBLOCK_SECTION_ID — используйте этот ключ только в режиме выбора основного раздела для элемента либо когда все товары привязаны только к одному разделу. Во всех остальных случаях используйте фильтр по SECTION_ID.
- 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», то в выборке будет осуществляться проверка прав доступа к информационным блокам. По умолчанию права доступа не проверяются.
- PERMISSIONS_BY — фильтрация по правам произвольного пользователя. Значение — ID пользователя или 0 (неавторизованный).
- *CATALOG_TYPE — фильтрация по типу товара;
- 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 — непустое значение задействует фильтр по датам активности. Будут выбраны активные по датам элементы.Если значение не установлено («»), фильтрация по датам активности не производится;
Чтобы выбрать все не активные по датам элементы, используется такой синтаксис: - ACTIVE_FROM — устаревший;
- ACTIVE_TO — устаревший;
- IBLOCK_ID — по коду информационного блока (фильтр Число);
При использовании инфоблоков 1.0 можно в IBLOCK_ID передать массив идентификаторов, чтобы сделать выборку из элементов нескольких инфоблоков:
Для инфоблоков 2.0 такая выборка будет работать только в том случае, если в ней не запрашиваются свойства элементов.
В некоторых случаях точное указание IBLOCK_ID в фильтре может ускорить выборку элементов. Так как зависимости сложные, каждый конкретный случай надо рассматривать отдельно.
- FIELD — строка, имя поля
- FILTER — массив, фильтр для отбора предложений.
Внутри GetList преобразовывается в: Доступен с версии 21.300.0 модуля iblock.
— фильтр по значениям свойств, где PROPERTY_CODE — код свойства или символьный код. Для свойств типа «Список», «Число», «Привязка к элементам» и «Привязка к разделам» — фильтр Число. Для прочих — фильтр Маска;
— по полю CATALOG_FIELD из цены типа PRICE_TYPE (ID типа цены), где CATALOG_FIELD может быть: PRICE — цена, CURRENCY — валюта.
PROPERTY_
. — фильтр по значениям полей связанных элементов. , где 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. Правила фильтров идентичны тем, которые описаны выше.
Перед названием фильтруемого поля можно указать тип проверки фильтра:
- «!» — не равно
- » » — больше
- «>=» — больше либо равно
- «> «.»PROPERTY_available»] = date(«Y-m-d»);
Примечание 2: при использовании типа проверки фильтра «> «Значение», где название параметра
«nTopCount» — ограничить количество сверху
«bShowAll» — разрешить вывести все элементы при постраничной навигации
«iNumPage» — номер страницы при постраничной навигации
«nPageSize» — количество элементов на странице при постраничной навигации
«nElementID» — ID элемента который будет выбран вместе со своими соседями. Количество соседей определяется параметром nPageSize. Например: если nPageSize равно 2-м, то будут выбраны максимум 5-ть элементов. Соседи определяются порядком сортировки заданным в параметре arOrder (см. выше) .
При этом действуют следующие ограничения:- Если элемент с таким ID отсутствует в выборке, то результат будет не определен.
- nElementID не работает, если задана группировка (см. параметр arGroupBy выше).
- в параметре arSelect обязательно должено присутствовать поле «ID».
- обязательно должна быть задана сортировка arOrder.
- поля в сортировке catalog_* не учитываются и результат выборки становится не определенным.
- в выборку добавляется поле RANK — порядковый номер элемента в «полной» выборке.
Необязательное. По умолчанию false — не ограничивать выводимые элементы.
Если передать в параметр arNavStartParams пустой массив, то ставится ограничение на 10 выводимых элементов.
, где PROPERTY_CODE — ID или символьный код (задается в верхнем регистре, даже если в определении свойств инфоблока он указан в нижнем регистре). В результате будет выведены значения свойств элемента в виде полей PROPERTY_
_VALUE — значение; PROPERTY_
_ID — код значения у элемента; PROPERTY_
_ENUM_ID — код значения (для свойств типа список).
При установленном модуле торгового каталога можно выводить и цены элемента. Для этого в качестве одного из полей необходимо указать *CATALOG_GROUP_
, где PRICE_CODE — ID типа цены.
Так же есть возможность выбрать поля элементов по значениям свойства типа «Привязка к элементам». Для этого необходимо указать PROPERTY_
. , где PROPERTY_CODE — ID или символьный код свойства привязки, а FIELD — поле указанного в привязке элемента. См. ниже «Поля связанных элементов для сортировки».
Можно выбрать и значения свойств элементов по значениям свойства типа «Привязка к элементам». Для этого необходимо указать PROPERTY_
, где PROPERTY_CODE — ID или символьный код свойства привязки, а PROPERTY_CODE2 — свойство указанного в привязке элемента.
По умолчанию выводить все поля. Значения параметра игнорируются, если используется параметр группировки arGroupBy.
Частные случаи
Рассмотрим несколько частных случаев фильтрации:
- $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». Например выберем маленькие зрелые и большие не зрелые апельсины:
В этом примере фильтр по свойствам апельсинов является подфильтром инфоблока фруктов.
Поля связанных элементов
- 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 — путь к списку элементов;
Возвращаемое значение
Примеры использования
Пример можно модернизировать, добавив вывод свойств для каждого элемента. Удобно использовать, не прибегая к GetProperty. В случае использования Инфоблоков 2.0 необходимо в $arSelect добавить IBLOCK_ID.
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.
Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
//Если нужно посчитать количество записей
if(\Bitrix\Main\Loader::includeModule(‘iblock’)) <
$arFilter = [
«IBLOCK_ID»=>1,
«ACTIVE»=>»Y»,
«=PROPERTY_18″=>[«vase»]
];
$db = \CIBlockElement::GetList([], $arFilter, false, [], [‘ID’]);
echo \CIBlockElement::GetList([], $arFilter, false, [], [‘ID’])->AffectedRowsCount();
>
//Если нужно посчитать количество записей
if(\Bitrix\Main\Loader::includeModule(‘iblock’)) <
$arFilter = [
«IBLOCK_ID»=>1,
«ACTIVE»=>»Y»,
«=PROPERTY_18″=>[«vase»]
];
$db = \CIBlockElement::GetList([], $arFilter, false, [], [‘ID’]);
echo \CIBlockElement::GetList([], $arFilter, false, [], [‘ID’])->AffectedRowsCount();
>
//Если нужно посчитать количество записей
if(\Bitrix\Main\Loader::includeModule(‘iblock’)) <
$arFilter = [
«IBLOCK_ID»=>1,
«ACTIVE»=>»Y»,
«=PROPERTY_18″=>[«vase»]
];
$db = \CIBlockElement::GetList([], $arFilter, false, [], [‘ID’]);
echo \CIBlockElement::GetList([], $arFilter, false, [], [‘ID’])->AffectedRowsCount();
>
//Если нужно посчитать количество записей
if(\Bitrix\Main\Loader::includeModule(‘iblock’)) <
$arFilter = [
«IBLOCK_ID»=>1,
«ACTIVE»=>»Y»,
«=PROPERTY_18″=>[«vase»]
];
$db = \CIBlockElement::GetList([], $arFilter, false, [], [‘ID’]);
echo \CIBlockElement::GetList([], $arFilter, false, [], [‘ID’])->AffectedRowsCount();
>
//Если нужно посчитать количество записей
if(\Bitrix\Main\Loader::includeModule(‘iblock’)) <
$arFilter = [
«IBLOCK_ID»=>1,
«ACTIVE»=>»Y»,
«=PROPERTY_18″=>[«vase»]
];
$db = \CIBlockElement::GetList([], $arFilter, false, [], [‘ID’]);
echo \CIBlockElement::GetList([], $arFilter, false, [], [‘ID’])->AffectedRowsCount();
>
Если нужно посчитать количество записей
if(\Bitrix\Main\Loader::includeModule(‘iblock’)) <
$arFilter = [
«IBLOCK_ID»=>1,
«ACTIVE»=>»Y»,
«=PROPERTY_18″=>[«vase»]
];
$db = \CIBlockElement::GetList([], $arFilter, false, [], [‘ID’]);
echo \CIBlockElement::GetList([], $arFilter, false, [], [‘ID’])->AffectedRowsCount();
>
*CATALOG_TYPE — фильтрация по типу товара;
Может принимать значения
простой: 1
товар с предложениями: 3
невалидный товар с предложениями: 6
комплект: 2
Получить cвойство тип (HTML/TEXT). Символьный код свойства HTML_CONTENT
Источник