Битрикс. Работа с инфоблоками в новом ядре

09.11.2018

Теги: CMSWeb-разработкаБитриксИнфоблокНовоеЯдроРазделИнфоблокаЭлементИнфоблока

Узелки на пямять:

  1. Получение списка разделов инфоблока
  2. Выборка разделов инфоблока с пользовательскими полями
  3. Выборка разделов инфоблока с сортировкой для построения дерева разделов
  4. Получение списка элементов инфоблока
  5. Выборка элементов инфоблока вместе с пользовательскими свойствами
  6. Выборка пользовательских свойств элементов инфоблока
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
)

Дополнительно

Поиск: CMS • Web-разработка • Битрикс • Инфоблок • Раздел инфоблока • Элемент инфоблока • SectionTable::getList • ElementTable::getList • PropertyTable::getList • Section::compileEntityByIblock • CIBlockElement::GetProperty • CFile::GetFileArray • Новое ядро

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.