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

(0)
Отправьте заявку нашим специалистам

Начните проект сейчас

Оставить заявку