Замечание от 1С-Битрикс - На данный момент, пока идёт активное развитие D7, к наследованию методов нужно подходить осторожно. Возможна ситуация, когда абстрактный метод может быть добавлен в базовый класс. Разработчикам рекомендуется не наследовать методы, а инкапсулировать их. Этот способ достаточно гибкий и безопасный. Официальная документация
Для работы через ORM нужно указать символьный код API в настройках инфоблока, после чего использовать имя с заглавной буквы. В примере используется Mytable, т.е. символьный код API установлен, как mytable.
Инфоблоки
Для работы с инфоблоком в старом ядре использовалась функция CIBlockElement::GetList(), теперь предлагается перейти на конструкцию типа этой:
$elements = \Bitrix\Iblock\Elements\ElementMytableTable::getList([ 'select' => ['ID', 'NAME', 'PREVIEW_TEXT', 'DETAIL_PICTURE', 'MYPROPS_' => 'MYPROPS', 'MYPROP'], 'filter' => ['=ACTIVE' => 'Y', '=ID' => $ID], ])->fetchAll(); foreach ($elements as $element) { // далее выводим данные }
Или с использованием кэша
$elements = \Bitrix\Iblock\Elements\ElementMytableTable::getList([ 'select' => ['ID', 'NAME', 'PREVIEW_TEXT', 'DETAIL_PICTURE', 'MYPROPS_' => 'MYPROPS', 'MYPROP'], 'filter' => ['=ACTIVE' => 'Y', '=ID' => 123], 'cache' => ['ttl' => 3600], ])->fetchAll(); foreach ($elements as $element) { // далее выводим данные }
К свойству теперь обращаемся напрямую, MYPROP, а не PROPERTY_MYPROP.
Выводим, используя геттеры и имя свойства в формате CamelCase
- $element->getMyprop()->getValue()
// Вариант 1 $element=\Bitrix\Iblock\Elements\ElementMytableTable::getByPrimary($PRODUCT_ID,array( 'select'=>array('MYPROP' ) ))->fetchObject(); echo $element->getMyprop()->getValue(); // Вариант 2 $elements = \Bitrix\Iblock\Elements\ElementMytableTable::getList([ 'select' => ['MYPROP'], 'filter' => [ 'ID' => 123, ], ])->fetchCollection(); foreach ($elements as $element) { echo 'MYPROP - '.$element->getMyprop()->getValue(); }
Более сложная выборка, если есть свойство типа список
$elements = \Bitrix\Iblock\Elements\ElementMytableTable::getList([ 'select' => ['ID', 'IBLOCK_ID', 'IBLOCK_SECTION', 'MYPROP.ITEM'], 'filter' => [ 'ID' => 123, 'IBLOCK_SECTION.CODE' => 'SENT', ], ])->fetchCollection(); foreach ($elements as $element) { echo 'ID - '.$element->getId(); echo 'SECTION - '.$element->getIblockSection()->getCode(); echo 'MYPROP - '.$element->getMyprop()->getValue(); if(!empty($element->getMyprop()->getItem())) { echo 'id - '.$element->getMyprop()->getItem()->getId(); echo 'xml_id - '.$element->getMyprop()->getItem()->getXmlId(); echo 'value - '.$element->getMyprop()->getItem()->getValue(); } }
Используемые типы:
SECTION - свойство типа привязка к разделу инфоблока
ITEM - свойство типа список
FILE - свойство типа файл
ELEMENT - свойство типа привязка к элементу инфоблока
Пример выборки по свойству типа список
$elements = \Bitrix\Iblock\Elements\ElementMytableTable::getList([ 'select' => ['ID', 'IBLOCK_ID', 'IBLOCK_SECTION', 'MYPROP.ITEM'], 'filter' => [ 'ID' => $ID, 'IBLOCK_SECTION.CODE' => 'SENT', '=MYPROP.ITEM.XML_ID' => 'SENT', ], ])->fetchCollection();
Теперь выведем несколько разных типов свойств
$elements = \Bitrix\Iblock\Elements\ElementLickeysTable::getList([ 'select' => ['ID', 'NAME', 'IBLOCK_ID', 'IBLOCK_SECTION', 'MYPROP.ITEM', 'PRODUCT.ELEMENT', 'MORE_PHOTO.FILE', 'MYPROP_STRING'], 'filter' => [ 'ID' => $ID, 'IBLOCK_SECTION.CODE' => 'SENT' ], ])->fetchCollection(); foreach ($elements as $element) { echo 'ID - '.$element->getId(); echo 'SECTION - '.$element->getIblockSection()->getCode(); // свойство типа строка MYPROP_STRING echo 'MYPROP_STRING - '.$element->getMypropString()->getValue(); // свойство типа список MYPROP if(!empty($element->getMyprop()->getItem())) { echo 'MYPROP id - '.$element->getMyprop()->getItem()->getId(); echo 'MYPROP xml_id - '.$element->getMyprop()->getItem()->getXmlId(); echo 'MYPROP value - '.$element->getMyprop()->getItem()->getValue(); } // свойство типа файл MORE_PHOTO foreach ($element->getMorePhoto()->getAll() as $foto){ echo '<img src="/upload/' . $foto->getFile()->getSubdir() . '/' . $foto->getFile()->getFileName() . '" alt="'. $element->getName() .'" />'; } // getAll() - получаем всю коллекцию // метод getFile() - для обхода коллекции // getSubdir() - инфо о конкретном файле // getFileName() - еще инфо // свойства типа связанные элементы PRODUCT // сначала получим коллекцию через getAll() foreach ($element->getProduct()->getAll() as $product){ echo 'ID связанного товара -' . $product->getElement()->getId() . ' наименование - ' . $product->getElement()->getName(); } }