Информационные блоки

Статья написана 29.10.2024

Подключаем модуль

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

В какие таблицы инфоблоков можно делать запросы

\Bitrix\Iblock\TypeTable::getList(); // типы инфоблоков
\Bitrix\Iblock\IblockTable::getList(); // инфоблоки
\Bitrix\Iblock\PropertyTable::getList(); // свойства инфоблоков
\Bitrix\Iblock\PropertyEnumerationTable::getList(); // значения свойств, например списков
\Bitrix\Iblock\PropertyFeatureTable::getList(); // доп. параметры свойств (например "Показывать на детальной странице элемента")
\Bitrix\Iblock\SectionTable::getList(); // Разделы инфоблоков
\Bitrix\Iblock\ElementTable::getList(); // Элементы инфоблоков 
\Bitrix\Iblock\ElementPropertyTable::getList() // Значения свойств элементов
\Bitrix\Iblock\InheritedPropertyTable::getList(); // Наследуемые свойства (seo шаблоны)

Делаем запрос в таблицу элементов инфоблока

$dbItems = \Bitrix\Iblock\ElementTable::getList(array(
    'order' => array('SORT' => 'ASC'), // сортировка
	'select' => array('ID', 'NAME', 'IBLOCK_ID', 'SORT', 'TAGS'), // выбираемые поля, без свойств
	'filter' => array('IBLOCK_ID' => 4), // фильтр только по полям элемента, свойства (PROPERTY) использовать нельзя
	'group' => array('TAGS'), // группировка по полю, order должен быть пустой
	'limit' => 1000, // целое число, ограничение выбираемого кол-ва
	'offset' => 0, // целое число, указывающее номер первого столбца в результате
	'count_total' => 1, // дает возможность получить кол-во элементов через метод getCount()
	'runtime' => array(), // массив полей сущности, создающихся динамически
	'data_doubling' => false, // разрешает получение нескольких одинаковых записей
	'cache' => array( // Кеш запроса. Сброс можно сделать методом \Bitrix\Iblock\ElementTable::getEntity()->cleanCache();
		'ttl' => 3600, // Время жизни кеша
		'cache_joins' => true // Кешировать ли выборки с JOIN
	),
));

Варианты использования $dbItems

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

Для добавления, изменения, удаления элементов и разделов инфоблоков необходимо использовать API старого ядра.

Работа с элементами инфоблока


Для работы с функционалом необходимо в настройках инфоблока прописать Символьный код API

Для получения названия класса для работы с D7 можно использовать следующий метод:

echo \Bitrix\Iblock\Iblock::wakeUp($iblockId)->getEntityDataClass();

Получить данные по ID элемента


Аналог в API - CIBlockElement::GetByID()

//Работа с элементом как с массивом
$element = \Bitrix\Iblock\Elements\ElementCatalogTable::getByPrimary($elementId, [
    'select' => [
        'ID', 
        'NAME', 
        'DETAIL_TEXT', 
        'DETAIL_PICTURE', 
        'ARTICLE_' => 'ARTICLE'
    ]
])->fetch();
var_dump($element);
----------------------------------------------------------------------------------
//Работа с элементом как с объектом
$element = \Bitrix\Iblock\Elements\ElementCatalogTable::getByPrimary($elementId, [
    'select' => [
        'ID', 
        'NAME', 
        'DETAIL_TEXT', 
        'DETAIL_PICTURE', 
        'ARTICLE_' => 'ARTICLE',
        'IBLOCK_SECTION'
    ]
])->fetch();

echo $element->getId();
echo $element->getName();
echo $element->get('NAME');
echo $element->getDetailPicture();
echo $element->getIblockSection()->getName();

Получить данные нескольких элементов


Аналог в API - CIBlockElement::GetList()

//Работа с элементами как с массивом
$elements = \Bitrix\Iblock\Elements\ElementCatalogTable::getList([
    'select' => ['ID', 'NAME', 'ARTICLE_' => 'ARTICLE'],
    'filter' => ['=ACTIVE' => 'Y'],
])->fetchAll();

foreach ($elements as $element) {
    echo $element['NAME'];
}
----------------------------------------------------------------------------------
//Работа с элементами как с объектом
$elements = \Bitrix\Iblock\Elements\ElementCatalogTable::getList([
    'select' => ['ID', 'NAME', 'DETAIL_PICTURE'],
    'filter' => [
        'ID' => $elementId
    ],
])->fetchCollection();

foreach ($elements as $element) {
    echo $element->getName();
}

Получить данные разделов элемента


*Для работы кода обязательно нужно использовать поле 'SECTIONS'

$element = \Bitrix\Iblock\Elements\ElementCatalogTable::getList([
    'select' => ['ID', 'SECTIONS'],
    'filter' => [
        'ID' => $elementId
    ],
])->fetchObject();

foreach ($element->getSections()->getAll() as $section) {
    echo $section->getId();
    echo $section->getCode();
    echo $section->getName();
}

Работа со свойствами элементов

Получить свойство типа Текст или Число

$element = \Bitrix\Iblock\Elements\ElementCatalogTable::getByPrimary($elementId, array(
    'select' => array('ID', 'ARTICLE')
))->fetchObject();

echo $element->getArticle()->getValue();

Получить свойство типа Текст или Число

$element = \Bitrix\Iblock\Elements\ElementCatalogTable::getByPrimary($elementId, array(
    'select' => array('ID', 'ARTICLE')
))->fetchObject();

echo $element->getArticle()->getValue();

Получить свойство типа Справочник

$elements = \Bitrix\Iblock\Elements\ElementCatalogTable::getList([
    'select' => ['ID', 'NAME', 'DETAIL_PICTURE', 'BRAND'],
    'filter' => [
        'ID' => $elementId
    ],
])->fetchCollection();

foreach ($elements as $element) {
    foreach ($element->getBrand()->getAll() as $value) {
        echo $value->getValue();
    }
}

Получить свойство типа Файл

$elements = \Bitrix\Iblock\Elements\ElementCatalogTable::getList([
    'select' => ['ID', 'MORE_PHOTO.FILE'],
    'filter' => [
        'ID' => $elementId
    ],
])->fetchCollection();

foreach ($elements as $element) {
    foreach ($element->getMorePhoto()->getAll() as $value) {
        var_dump('/upload/' . $value->getFile()->getSubdir().'/'.$value->getFile()->getFileName());
    }
}

Получить свойство типа Список

$element = \Bitrix\Iblock\Elements\ElementCatalogTable::getList([
    'select' => ['ID', 'COLOR.ITEM'],
    'filter' => [
        'ID' => $elementId
    ],
])->fetchObject();
echo $element->getColor()->getItem()->getId();
echo $element->getColor()->getItem()->getXmlId();
echo $element->getColor()->getItem()->getValue();

Получить свойство типа Привязка к элементам или Привязка к разделам


*Для работы кода обязательно нужно использовать приписку к полю '.ELEMENT' или '.SECTION'

$element = \Bitrix\Iblock\Elements\ElementCatalogTable::getList([
    'select' => ['ID', 'BRAND.ELEMENT'],
    'filter' => [
        'ID' => $elementId
    ],
])->fetchObject();

foreach ($element->getBrand()->getAll() as $brand) {
    echo $brand->getElement()->getId();
    echo $brand->getElement()->getName();
}

Кеширование

$element = \Bitrix\Iblock\Elements\ElementCatalogTable::getList([
    'select' => ['ID', 'NAME'],
    'filter' => [
        'ID' => $elementId
    ],
    'cache' => array( // Кеш запроса. Сброс можно сделать методом \Bitrix\Iblock\ElementTable::getEntity()->cleanCache();
		'ttl' => 3600, // Время жизни кеша
		'cache_joins' => true // Кешировать ли выборки с JOIN
    )
])->fetchObject();

Примеры

Получить и вывести данные элементов инфоблока

$dbItems = \Bitrix\Iblock\ElementTable::getList([
    'order' => ['SORT' => 'ASC'],
    'select' => [
        'ID',
        'NAME',
        'CODE',
    ],
    'filter' => [
        'IBLOCK_ID' => $arParams['IBLOCK_ID']
    ]
]);
while ($arItem = $dbItems->fetch()) {
    print_r($arItem);
}

Получить символьный код элемента

$dbItems = \Bitrix\Iblock\ElementTable::getList([
    'order' => ['SORT' => 'ASC'],
    'select' => [
        'ID',
        'NAME',
        'CODE',
        'IBLOCK_ID',
        'IBLOCK_SECTION_ID',
        'DETAIL_PAGE_URL_RAW' => 'IBLOCK.DETAIL_PAGE_URL'
    ],
    'filter' => [
        'IBLOCK_ID' => $arParams['IBLOCK_ID']
    ]
]);
while ($arItem = $dbItems->fetch()) {
    $DETAIL_PAGE_URL = \CIBlock::ReplaceDetailUrl($arItem['DETAIL_PAGE_URL_RAW'], $arItem, true, 'E');
}

Вернуться

Благодарю за подписку

Теперь Вы не пропустите информацию о ближайших скидках и акциях

Благодарю за заявку

Я свяжусь с Вами в ближайшее время!

Мы используем файлы cookie и сервисы аналитики, чтобы улучшать работу сайта. Нажимая «Принять», вы соглашаетесь с их использованием. Вы можете отключить cookie в настройках браузера. Подробнее.