Замечание от 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();
}
}
