-
Роман ЦукановРазработчик
-
Дата публикации14.02.2024
-
Категория1С-Битрикс
Итак. В 20й версии битрикс появилась возможность использовать методы нового ядра. Данная статья объединяет в себе наиболее распространенные и востребованные конструкции кода. необходимые при разработке и поддержке сайта на битрикс.
Для начала стоит сказать, что у инфоблока, с которым предстоит работать, обязательно должно быть заполнено поле Символьный код API, так как для работы с элементами инфоблока будет использоваться класс вида \Bitrix\Iblock\Elements\Element[Символьный код API]Table. А также перед написанием запросов необходимо подключить модуль iblock:
\Bitrix\Main\Loader::includeModule('iblock');
Переходим к частным случаям.
Получение элемента с пользовательским свойством COLOR по его ID, аналог CIBlockElement::GetByID
$element = \Bitrix\Iblock\Elements\ElementCatalogTable::getByPrimary($elementId, [
'select' => ['ID', 'NAME', 'DETAIL_TEXT', 'DETAIL_PICTURE', 'COLOR_' => 'COLOR'],
])->fetch();
$elementName = $element['NAME'];
$colorValue = $element['COLOR_VALUE'];
Получение объекта элемента с пользовательским свойством COLOR по его ID
$element = \Bitrix\Iblock\Elements\ElementCatalogTable::getByPrimary($elementId, array(
'select' => array('ID', 'NAME', 'DETAIL_PICTURE', 'COLOR')
))->fetchObject();
$elementId = $element->getId();
$elementName = $element->getName();
$elementDetailPictureId = $element->getDetailPicture();
$elementPropertyColorValue = $element->getColor()->getValue();
Стоит обратить внимание на то, что если у вас в символьном коде свойства присутствует цифра, то при формировании названий методов для доступа к свойству участвуют свои не совсем очевидные правила. Ниже, чтобы не разводить писанину, на примерах будет показана зависимость названия метода от наличия цифры в конце или середине символьного кода свойства. Наличие цифры в начале символьного кода свойства недопустимо по правилам самого движка Битрикс. Внимание на заглавные буквы в названиях методов.
Код свойства TEST_TEST_2. Название метода getTestTest_2(). Код свойства TEST_TEST2. Название метода getTestTest2(). Код свойства TEST_2_TEST. Название метода getTest_2Test(). Код свойства TEST2_TEST. Название метода getTest2Test(). Код свойства TEST2TEST. Название метода getTest2test().
Получение элемента с пользовательским свойством по параметрам фильтра, аналог CIBlockElement::GetList
$elements = \Bitrix\Iblock\Elements\ElementCatalogTable::getList([
'select' => ['ID', 'NAME', 'COLOR_' => 'COLOR'],
'filter' => ['=ACTIVE' => 'Y', 'IBLOCK_SECTION_ID' => 2],
'group' => ['MODIFIED_BY'],
'order' => array('SORT' => 'DESC', 'DATE_ACTIVE_FROM' => 'ASC'),
'limit' => 10,
'offset' => 5
])->fetchAll();
foreach ($elements as $element) {
}
Получение объекта элемента (коллекции) по параметрам фильтра
$elements = \Bitrix\Iblock\Elements\ElementCatalogTable::getList([
'select' => ['ID', 'NAME', 'DETAIL_PICTURE'],
'filter' => [
'ID' => $elementId,
],
])->fetchCollection();
foreach ($elements as $element) {
$elementName = $element->getName();
}
Получение DETAIL_PAGE_URL элемента
$elements = \Bitrix\Iblock\Elements\ElementCatalogTable::getList([
'select' => ['ID', 'NAME', 'DETAIL_PAGE_URL' => 'IBLOCK.DETAIL_PAGE_URL'],
'filter' => ['=ACTIVE' => 'Y', 'IBLOCK_SECTION_ID' => 2],
])->fetchAll();
foreach ($elements as $key => $element) {
$arResult['ITEMS'][$key]['DETAIL_PAGE_URL'] = CIBlock::ReplaceDetailUrl($element['DETAIL_PAGE_URL'], $element, false, 'E');
}
Обратите внимание, что метод CIBlock::ReplaceDetailUrl вторым параметром требует поля элемента/раздела, которые используются для формирования ссылки. Поэтому не забудьте добавить нужные вам поля в select. Или выбирайте все поля и DETAIL_PAGE_URL вот так:
$elements = \Bitrix\Iblock\Elements\ElementCatalogTable::getList([
'select' => ['*', 'DETAIL_PAGE_URL' => 'IBLOCK.DETAIL_PAGE_URL'],
'filter' => ['=ACTIVE' => 'Y', 'IBLOCK_SECTION_ID ' => 2],
])->fetchAll();
Получение раздела элемента
$elements = \Bitrix\Iblock\Elements\ElementCatalogTable::getList([
'select' => ['ID', 'IBLOCK_SECTION'],
'filter' => [
'ID' => $elementId,
],
])->fetchObject();
$sectionName = $element->getIblockSection()->getName());
Получение разделов элемента
На тот случай, если элемент привязан к нескольким разделам.
$element = \Bitrix\Iblock\Elements\ElementCatalogTable::getList([
'select' => ['ID', 'SECTIONS'],
'filter' => [
'ID' => $elementId,
],
])->fetchObject();
$sectionsIds = array();
foreach ($element->getSections()->getAll() as $section) {
$sectionsIds[] = $section->getId();
}
Получение множественного свойства COLOR типа справочник
$elements = \Bitrix\Iblock\Elements\ElementCatalogTable::getList([
'select' => ['ID', 'NAME', 'DETAIL_PICTURE', 'COLOR'],
'filter' => [
'ID' => $elementId,
],
])->fetchCollection();
$colors = array();
foreach ($elements as $element) {
foreach ($element->getColor()->getAll() as $value) {
$colors[] = $value->getValue();
}
}
Получение множественного свойства MORE_PHOTO типа файл
$elements = \Bitrix\Iblock\Elements\ElementCatalogTable::getList([
'select' => ['ID', 'MORE_PHOTO.FILE'],
'filter' => [
'ID' => $elementId,
],
])->fetchCollection();
$fileUrl = $fileUrl2 = array();
foreach ($elements as $element) {
foreach ($element->getMorePhoto()->getAll() as $value) {
$fileUrl[] = CFile::GetPath($value->getFile()->getID());
// OR
$fileUrl2[] = '/upload/' . $value->getFile()->getSubdir().'/'.$value->getFile()->getFileName();
}
}
Получение значение свойства NEWPRODUCT типа список
$element = \Bitrix\Iblock\Elements\ElementCatalogTable::getList([
// 'select' => ['ID', 'NEWPRODUCT'], - для получения просто id выбранного значения
'select' => ['ID', 'NEWPRODUCT.ITEM'],
'filter' => [
'ID' => $elementId,
],
])->fetchObject();
$propertyNewProductValueId = $element->getNewproduct()->getItem()->getId();
$propertyNewProductValueXmlId = $element->getNewproduct()->getItem()->getXmlId();
$propertyNewProductValue = $element->getNewproduct()->getItem()->getValue();
Получение значений множественного свойства привязки к элементу либо разделу
$element = \Bitrix\Iblock\Elements\ElementCatalogTable::getList([
// 'select' => ['ID', 'RECOMMEND.SECTION'], - привязка к разделу
'select' => ['ID', 'NAME', 'SIMILAR.ELEMENT'], // привязка к элементу
'filter' => [
'ID' => $leadId,
],
])->fetchObject();
// $similarElementId = $element->getSimilar()->getElement()->getId(); - если свойство не множественное
foreach ($element->getSimilar()->getAll() as $linkElement) {
$similarElementId = $linkElement->getElement()->getId();
$similarElementName = $linkElement->getElement()->getName();
}
// Для привязки в разделам:
// foreach ($element->getRecommend()->getAll() as $linkSection) {
// $recommendSectionId = $linkSection->getSection()->getId();
// $recommendSectionName = $linkSection->getSection()->getName();
// }
Кеширование результатов выборки
Новое ядро D7 позволяет кешировать данные полученные в результате запросов.
$element = \Bitrix\Iblock\Elements\ElementCatalogTable::getList([
'select' => ['ID', 'NAME'],
'filter' => [
'ID' => $elementId,
],
"cache" => ["ttl" => 3600],
])->fetchObject();