В системе битрикс существует универсальный инструмент, который называется инфоблоками. Благодаря инфоблокам можно структурировать данные по каталогам и элементам, работать с их свойствами, и управлять различными типами данных в системе. Инфоблок по сути представляет из себя отдельный модуль, который практически является основной частью в Bitrix Framework. Практический каждый каталог или интернет-магазин завязан на модуль информационных блоков, в них хранится структура каталога, товары, торговые предложения, данные служебных страниц, новости, и много другой служебной информации. На самом деле хранить в них можно практически любую информацию, т.к. модуль инфоблоков позволяет создавать и настраивать инфоблоки очень гибко.
Инфоблоки удобно создаются и редактируются в администраторской части сайта. Что касается программной части, то для работы с ними существует API, которое позволяет выполнять все операции с данными. Таким образом разработчики могут создавать свои решения, оформлять их в отдельные компоненты, используя возможности API.
Наверное, вы уже в курсе, что с появлением нового движка D7 множество методов работы в API изменились. Обратная совместимость для некоторых участков кода осталась, но уже сами разработчики рекомендуют использовать библиотеки и классы актуальные для D7. Далее мы рассмотрим примеры для работы с информационными блоками в D7.
Перед использованием модуля, подключаем его:
\Bitrix\Main\Loader::includeModule('iblock');
После подключения модуля, нам становится доступен целый набор различных классов и методов для работы с данными инфоблоков. Наиболее часто используемые методы, это получение списков записей:
\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() присутствует практически в каждом классе. Для этого метода в системе битрикс заложено схожие для многих методов правила, согласно которому и происходит передача входных параметров методу. Традиционно это параметры сортировки списка, условия фильтра, поля для группировки элементов, параметры постраничной навигации, поля для выборки, и другие параметры.
Давайте рассмотрим пример выборки информационного блока и его свойств:
// запрос инфоблока с кодом 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();
Как мы знаем есть свойства, которые могут иметь множество значений. К таким типам свойств к примеру, относится свойства типа «Список». Чтобы получить значения определённого свойства, мы можем использовать следующий код:
$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; }
Важной составляющей инфоблока так же являются его элементы. Выбираются они аналогичным способом, с использованием специального метода. Давайте сделаем выборку элементов, а также их свойств.
// выборка списка элементов $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
Кроме выборки данных посредством метода 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 битрикс-а для работы с инфоблоками. Разумеется, привести все примеры в данном посту будет не очень удобным. Однако зная название самого метода, вы сможете найти в сети детальное описание его работы, а также интересующие вас примеры.
Тут не хватает таблицы значений свойств ElementPropertyTable