О web-разработке
и даже немного больше...

API для работы с инфоблоками в Bitrix D7

В системе битрикс существует универсальный инструмент, который называется инфоблоками. Благодаря инфоблокам можно структурировать данные по каталогам и элементам, работать с их свойствами, и управлять различными типами данных в системе. Инфоблок по сути представляет из себя отдельный модуль, который практически является основной частью в Bitrix Framework. Практический каждый каталог или интернет-магазин завязан на модуль информационных блоков, в них хранится структура каталога, товары, торговые предложения, данные служебных страниц, новости, и много другой служебной информации. На самом деле хранить в них можно практически любую информацию, т.к. модуль инфоблоков позволяет создавать и настраивать инфоблоки очень гибко.

Инфоблоки удобно создаются и редактируются в администраторской части сайта. Что касается программной части, то для работы с ними существует API, которое позволяет выполнять все операции с данными. Таким образом разработчики могут создавать свои решения, оформлять их в отдельные компоненты, используя возможности API.

Наверное, вы уже в курсе, что с появлением нового движка D7 множество методов работы в API изменились. Обратная совместимость для некоторых участков кода осталась, но уже сами разработчики рекомендуют использовать библиотеки и классы актуальные для D7. Далее мы рассмотрим примеры для работы с информационными блоками в D7.

Перед использованием модуля, подключаем его:

\Bitrix\Main\Loader::includeModule('iblock');

Выборка записей информационных блоков в D7

После подключения модуля, нам становится доступен целый набор различных классов и методов для работы с данными инфоблоков. Наиболее часто используемые методы, это получение списков записей:

\Bitrix\Iblock\TypeTable::getList(); // списки типов инфоблоков
\Bitrix\Iblock\IblockTable::getList(); // списки инфоблоков
\Bitrix\Iblock\PropertyTable::getList(); // списки свойств инфоблоков
\Bitrix\Iblock\PropertyEnumerationTable::getList(); // списки значений свойств, хранимых отдельно
\Bitrix\Iblock\SectionTable::getList(); // Списки разделы инфоблоков
\Bitrix\Iblock\ElementTable::getList(); // Списки элементов инфоблоков 
\Bitrix\Iblock\InheritedPropertyTable::getList(); // Списки наследуемых свойств (seo шаблоны) 

Существуют и другие методы для работы с инфоблоками, и это лишь часть из них. Как вы заметили метод getList() присутствует практически в каждом классе. Для этого метода в системе битрикс заложено схожие для многих методов правила, согласно которому и происходит передача входных параметров методу. Традиционно это параметры сортировки списка, условия фильтра, поля для группировки элементов, параметры постраничной навигации, поля для выборки, и другие параметры.

Выборка инфоблока в битрикс D7

Давайте рассмотрим пример выборки информационного блока и его свойств:

// запрос инфоблока с кодом news
$arIblock = \Bitrix\Iblock\IblockTable::getList(array(
			'filter' => array('CODE' => 'news') // параметры фильтра
		))->fetch();

// получение списка свойств информационного блока
$arProps = \Bitrix\Iblock\PropertyTable::getList(array(
	'select' => array('*'),
	'filter' => array('IBLOCK_ID' => $arIblock['ID'])
))->fetchAll();

Получение значений свойств в битрикс D7

Как мы знаем есть свойства, которые могут иметь множество значений. К таким типам свойств к примеру, относится свойства типа «Список». Чтобы получить значения определённого свойства, мы можем использовать следующий код:

$dbEnums = \Bitrix\Iblock\PropertyEnumerationTable::getList(array(
		'order' => array('SORT' => 'asc'), // параметры сортировки
		'select' => array('*'), // * - означает что выбираем все поля
		'filter' => array('PROPERTY_ID' => $arIblockProp['ID']) // параметры фильтра
	));
while($arEnum = $dbEnums->fetch()) {
	$arIblockProp['ENUM_LIST'][$arEnum['ID']] = $arEnum;
}

Выборка элементов инфоблока в D7

Важной составляющей инфоблока так же являются его элементы. Выбираются они аналогичным способом, с использованием специального метода. Давайте сделаем выборку элементов, а также их свойств.

// выборка списка элементов
$dbItems = \Bitrix\Iblock\ElementTable::getList(array(
				'select' => array('ID', 'NAME', 'IBLOCK_ID'),
				'filter' => array('IBLOCK_ID' => $arParams['IBLOCK_ID'])
			));

while ($arItem = $dbItems->fetch()){
	// свойства элементов
	$dbProperty = \CIBlockElement::getProperty(
		$arItem['IBLOCK_ID'],
		$arItem['ID']
	); 
	while($arProperty = $dbProperty->Fetch()){  
		$arItem['PROPERTIES'][] = $arProperty;
	}
}

Стоит заметить, что все методы имеют некоторую схожесть работы с ними, это значительно помогает упростить понимание работы методов, и удобной работы с ними. Мы передаём некоторый набор установленных параметров методу, после чего через объект в переменной $dbItems можем выполнять операции с данными:

$dbItems->fetch(); // получение текущей записи, можно выполнять итерацию в цикле while 
$dbItems->fetchRaw(); // аналогичный метод как и $dbItems->fetch()
$dbItems->fetchAll(); // получение всего списка записей
$dbItems->getCount(); // кол-во записей, без учета limit (в запросе должно быть так же указано count_total = 1)
$dbItems->getSelectedRowsCount(); // кол-во записей, с учетом limit

Методы D7 для работы с данными инфоблоков

Кроме выборки данных посредством метода getList(), мы можем выполнять и другие операции, для изменяя данных, удаления, получения id записей, количества, а так же другие операции с данными инфоблока. Для этих целей доступны и такие методы:

add(array $data) // добавление элемента в инфоблок
addMulti($rows, $ignoreEvents = false) // для множественного добавления записей
checkFields(Result $result, $primary, array $data) // метод проверяет поля данных перед записью в БД.
delete($primary) // удаление элемента по ID
getById($id) // получение элемента по ID
getByPrimary($primary, array $parameters = array()) // метод возвращает выборку по первичному ключу сущности и по опциональным параметрам \Bitrix\Main\Entity\DataManager::getList.
getConnectionName() // метод возвращает имя соединения для сущности. 12.0.9
getCount($filter = array(), array $cache = array()) // метод выполняет COUNT запрос к сущности и возвращает результат. 12.0.10
getEntity() // метод возвращает объект сущности.
getList(array $parameters = array()) // получение элементов, подробнее было выше
getMap() // метод возвращает описание карты сущностей. 12.0.7
getRow(array $parameters) // метод возвращает один столбец (или null) по параметрам для \Bitrix\Main\Entity\DataManager::getList.
getRowById($id) // метод возвращает один столбец (или null) по первичному ключу сущности. 14.0.0
getTableName() // метод возвращает имя таблицы БД для сущности. 12.0.7
query() // метод создаёт и возвращает объект запроса для сущности.
update($primary, array $data) // обновление элемента по ID
updateMulti($primaries, $data, $ignoreEvents = false)
enableCrypto($field, $table = null, $mode = true) // метод устанавливает флаг поддержки шифрования для поля. 17.5.14
cryptoEnabled($field, $table = null) // метод возвращает true если шифрование разрешено для поля. 17.5.14

Данный пост может послужить вам хорошей шпаргалкой по методам API битрикс-а для работы с инфоблоками. Разумеется, привести все примеры в данном посту будет не очень удобным. Однако зная название самого метода, вы сможете найти в сети детальное описание его работы, а также интересующие вас примеры.

Опубликован: 15.04.2020 г.

См. также:

«Не удалось установить соединение с сервером. Проверьте …».
Получение Email-адреса покупателя в заказе (Bitrix D7)
Работа с URL-адресами в Bitrix D7
Работа с купонами в Bitrix API
Добавляем пункт меню для списков в админке Битрикс
Диалоговые окна в Bitrix API
Создание инфоблока при установке модуля
Создание копии корзины из заказа на Bitrix D7

Комментарии

  1. Ghost пишет:

    Тут не хватает таблицы значений свойств ElementPropertyTable

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии
  • Загрузка...
Друзья сайта