Битрикс. Работа с инфоблоками в новом ядре
09.11.2018
Теги: CMS • Web-разработка • Битрикс • Инфоблок • НовоеЯдро • РазделИнфоблока • ЭлементИнфоблока
Узелки на пямять:
- Получение списка разделов инфоблока
- Выборка разделов инфоблока с пользовательскими полями
- Выборка разделов инфоблока с сортировкой для построения дерева разделов
- Получение списка элементов инфоблока
- Выборка элементов инфоблока вместе с пользовательскими свойствами
- Выборка пользовательских свойств элементов инфоблока
use \Bitrix\Main\Loader; use \Bitrix\Iblock\SectionTable; use \Bitrix\Iblock\ElementTable; use \Bitrix\Iblock\PropertyTable; Loader::includeModule('iblock');
Получение списка корневых разделов инфоблока:
$result = SectionTable::getList( array( 'select' => array('ID', 'NAME', 'CODE'), 'filter' => array('=IBLOCK_ID' => 5, 'DEPTH_LEVEL' => 1), ) ); while ($row = $result->fetch()) { debug($row); }
Array ( [ID] => 28 [NAME] => Породы собак [CODE] => porody-sobak ) Array ( [ID] => 29 [NAME] => Породы кошек [CODE] => porody-koshek )
Список корневых разделов инфоблока с пользовательскими полями:
$entity = \Bitrix\Iblock\Model\Section::compileEntityByIblock(5); // теперь $entity = \Bitrix\Iblock\Section5Table $result = $entity::getList( array( 'select' => array('ID', 'NAME', 'CODE', 'UF_SECT_DESCR', 'UF_SECT_KEYWRD'), 'filter' => array('=IBLOCK_ID' => 5, 'DEPTH_LEVEL' => 1) ) ); while ($row = $result->fetch()) { debug($row); }
Array ( [ID] => 28 [NAME] => Породы собак [CODE] => porody-sobak [UF_SECT_DESCR] => Породы собак с названиями и фотографиями. Подробные описания пород, полезные статьи... [UF_SECT_KEYWRD] => породы собак фотографии описание повадки служебные бульдог овчарка борзая лайка далматин ) Array ( [ID] => 29 [NAME] => Породы кошек [CODE] => porody-koshek [UF_SECT_DESCR] => Породы кошек с названиями и фотографиями. Подробные описания пород, полезные статьи... [UF_SECT_KEYWRD] => породы кошек фотографии описание повадки ангорская абиссинская сиамская бобтейл персидская )
Выборка разделов инфоблока с сортировкой для построения дерева разделов:
$result = SectionTable::getList( array( 'select' => array( 'ID', 'NAME', 'DEPTH_LEVEL', ), 'filter' => array( 'IBLOCK_ID' => 5, 'ACTIVE' => 'Y', 'GLOBAL_ACTIVE' => 'Y', ), 'order' => array('LEFT_MARGIN' => 'ASC'), ) ); while ($row = $result->fetch()) { debug($row); }
Array ( [ID] => 29 [NAME] => Породы кошек [DEPTH_LEVEL] => 1 ) Array ( [ID] => 32 [NAME] => Длинношерстные [DEPTH_LEVEL] => 2 ) Array ( [ID] => 33 [NAME] => Короткошерстные [DEPTH_LEVEL] => 2 ) Array ( [ID] => 28 [NAME] => Породы собак [DEPTH_LEVEL] => 1 ) Array ( [ID] => 31 [NAME] => Декоративные породы [DEPTH_LEVEL] => 2 ) Array ( [ID] => 30 [NAME] => Служебные породы [DEPTH_LEVEL] => 2 )
Получение списка элементов инфоблока:
$result = ElementTable::getList( array( 'select' => array('ID', 'NAME', 'CODE'), 'filter' => array('=IBLOCK_ID' => 5, '=IBLOCK_SECTION_ID' => 28), ) ); while ($row = $result->fetch()) { debug($row); }
Array ( [ID] => 347 [NAME] => Английский бульдог [CODE] => angliyskiy-buldog ) Array ( [ID] => 348 [NAME] => Далматин [CODE] => dalmatin ) Array ( [ID] => 349 [NAME] => Афганская борзая [CODE] => afganskaya-borzaya )
Как получить элементы инфоблока вместе с пользовательскими свойствами, я еще не разобрался, поэтому пока что так:
$dbElements = ElementTable::getList( array( 'select' => array('ID', 'NAME', 'CODE', 'IBLOCK_ID'), 'filter' => array('=IBLOCK_ID' => 5) ) ); while ($arElement = $dbElements->fetch()) { /* * Для каждого элемента инфоблока получаем пользовательские свойства: * 1. Автор, базовый тип Строка, код AUTHOR * 2. Оценка, базовый тип Список, код RATING * 3. Галерея, базовый тип Файл, множественное, код GALLERY * 4. Дата обновления, пользовательский тип Дата, код UPDATE * 5. Примечание, пользовательский тип HTML/текст, код NOTE */ /* * 1. Автор, базовый тип Строка, код AUTHOR */ $dbProperties = CIBlockElement::GetProperty( $arElement['IBLOCK_ID'], $arElement['ID'], array(), array('CODE' => 'AUTHOR') ); if ($arProperty = $dbProperties->Fetch()) { $arElement['PROPERTIES'][$arProperty['CODE']] = $arProperty; } /* * 2. Оценка, базовый тип Список, код RATING */ $dbProperties = CIBlockElement::GetProperty( $arElement['IBLOCK_ID'], $arElement['ID'], array(), array('CODE' => 'RATING') ); if ($arProperty = $dbProperties->Fetch()) { $arElement['PROPERTIES'][$arProperty['CODE']] = $arProperty; } /* * 3. Галерея, базовый тип Файл, множественное, код GALLERY */ $dbProperties = CIBlockElement::GetProperty( $arElement['IBLOCK_ID'], $arElement['ID'], array(), array('CODE' => 'GALLERY') ); // поскольку свойство множественное, значений будет несколько $gallery = array(); while ($arProperty = $dbProperties->Fetch()) { $gallery[] = CFile::GetFileArray($arProperty['VALUE']); $temp = $arProperty; } $arElement['PROPERTIES'][$temp['CODE']] = $temp; $arElement['PROPERTIES'][$temp['CODE']]['IMAGES'] = $gallery; /* * 4. Дата обновления, пользовательский тип Дата, код UPDATE */ $dbProperties = CIBlockElement::GetProperty( $arElement['IBLOCK_ID'], $arElement['ID'], array(), array('CODE' => 'UPDATE') ); if ($arProperty = $dbProperties->Fetch()) { $arElement['PROPERTIES'][$arProperty['CODE']] = $arProperty; } /* * 5. Примечание, пользовательский тип HTML/текст, код NOTE */ $dbProperties = CIBlockElement::GetProperty( $arElement['IBLOCK_ID'], $arElement['ID'], array(), array('CODE' => 'NOTE') ); if ($arProperty = $dbProperties->Fetch()) { $arElement['PROPERTIES'][$arProperty['CODE']] = $arProperty; } debug($arElement); }
Array
(
[ID] => 349
[NAME] => Афганская борзая
[CODE] => afganskaya-borzaya
[IBLOCK_ID] => 5
[PROPERTIES] => Array
(
[AUTHOR] => Array
(
[ID] => 47
[IBLOCK_ID] => 5
[NAME] => Автор
[ACTIVE] => Y
[CODE] => AUTHOR
[PROPERTY_TYPE] => S
[MULTIPLE] => N
[USER_TYPE] =>
[PROPERTY_VALUE_ID] => 1
[VALUE] => Сергей Иванов
[DESCRIPTION] =>
..........
)
[RATING] => Array
(
[ID] => 48
[IBLOCK_ID] => 5
[NAME] => Оценка
[ACTIVE] => Y
[CODE] => RATING
[MULTIPLE] => N
[USER_TYPE] =>
[PROPERTY_VALUE_ID] => 9
[VALUE] => 27
[DESCRIPTION] =>
[VALUE_ENUM] => Интересно
..........
)
[GALLERY] => Array
(
[ID] => 49
[IBLOCK_ID] => 5
[NAME] => Галерея
[ACTIVE] => Y
[CODE] => GALLERY
[PROPERTY_TYPE] => F
[MULTIPLE] => Y
[FILE_TYPE] => jpg, gif, bmp, png, jpeg
[USER_TYPE] =>
[PROPERTY_VALUE_ID] => 5
[VALUE] => 1036
[DESCRIPTION] =>
..........
[IMAGES] => Array
(
[0] => Array
(
[ID] => 1034
[MODULE_ID] => iblock
[HEIGHT] => 300
[WIDTH] => 400
[FILE_SIZE] => 33085
[CONTENT_TYPE] => image/jpeg
[FILE_NAME] => ef1a80087669d483faa9c3db3441985a.jpg
[DESCRIPTION] =>
[SRC] => /upload/iblock/ef1/ef1a80087669d483faa9c3db3441985a.jpg
..........
)
[1] => Array
(
[ID] => 1035
[MODULE_ID] => iblock
[HEIGHT] => 300
[WIDTH] => 400
[FILE_SIZE] => 45306
[CONTENT_TYPE] => image/jpeg
[FILE_NAME] => b96bb594c3bc5580a972f993e05f7317.jpg
[DESCRIPTION] =>
[SRC] => /upload/iblock/b96/b96bb594c3bc5580a972f993e05f7317.jpg
..........
)
[2] => Array
(
[ID] => 1036
[MODULE_ID] => iblock
[HEIGHT] => 300
[WIDTH] => 400
[FILE_SIZE] => 24919
[CONTENT_TYPE] => image/jpeg
[FILE_NAME] => 18ca914388b75729618a412afd3f464b.jpg
[DESCRIPTION] =>
[SRC] => /upload/iblock/18c/18ca914388b75729618a412afd3f464b.jpg
..........
)
)
)
[UPDATE] => Array
(
[ID] => 50
[IBLOCK_ID] => 5
[NAME] => Дата обновления
[ACTIVE] => Y
[CODE] => UPDATE
[PROPERTY_TYPE] => S
[MULTIPLE] => N
[USER_TYPE] => Date
[PROPERTY_VALUE_ID] => 6
[VALUE] => 19.10.2018
[DESCRIPTION] =>
..........
)
[NOTE] => Array
(
[ID] => 51
[IBLOCK_ID] => 5
[NAME] => Примечание
[ACTIVE] => Y
[CODE] => NOTE
[DEFAULT_VALUE] => Array
(
[TYPE] => TEXT
[TEXT] =>
)
[PROPERTY_TYPE] => S
[MULTIPLE] => N
[USER_TYPE] => HTML
[PROPERTY_VALUE_ID] => 7
[VALUE] => Array
(
[TEXT] => Примечание к публикации, Примечание к публикации, Примечание к публикации...
[TYPE] => TEXT
)
[DESCRIPTION] =>
..........
)
)
)
Array
(
..........
)
Выборка пользовательских свойств элементов инфоблока:
$result = PropertyTable::getList( array( 'select' => array('ID', 'NAME', 'CODE', 'PROPERTY_TYPE'), 'filter' => array('IBLOCK_ID' => 5) ) ); while ($row = $result->fetch()) { debug($row); }
Array ( [ID] => 47 [NAME] => Автор [CODE] => AUTHOR [PROPERTY_TYPE] => S ) Array ( [ID] => 48 [NAME] => Оценка [CODE] => RATING [PROPERTY_TYPE] => L ) Array ( [ID] => 49 [NAME] => Галерея [CODE] => GALLERY [PROPERTY_TYPE] => F ) Array ( [ID] => 50 [NAME] => Дата обновления [CODE] => UPDATE [PROPERTY_TYPE] => S ) Array ( [ID] => 51 [NAME] => Примечание [CODE] => NOTE [PROPERTY_TYPE] => S )
Дополнительно
- Расширение для работы с ORM для инфоблоков
- ORM-обёртка для инфоблоков
- Фильтрация по пользовательским свойствам getList
- Выборка разделов инфоблока
- Битрикс. Работа с инфоблоками в старом ядре
- Битрикс. Создание комплексного компонента. Часть 4 из 4
- Битрикс. Создание комплексного компонента. Часть 3 из 4
- Битрикс. Создание комплексного компонента. Часть 2 из 4
- Битрикс. Создание комплексного компонента. Часть 1 из 4
- Битрикс. Работа с шаблонами SEO
- Битрикс. SEO для инфоблока, раздела и страницы
Поиск: CMS • Web-разработка • Битрикс • Инфоблок • Раздел инфоблока • Элемент инфоблока • SectionTable::getList • ElementTable::getList • PropertyTable::getList • Section::compileEntityByIblock • CIBlockElement::GetProperty • CFile::GetFileArray • Новое ядро