Битрикс – выбираем из highloadblock справочника по имени

Учимся забирать данные из хайлоад блоков, используя фильтр.

Как вытащить информацию из highloadblock справочника, если известно только имя бренда, имя цвета?

Всё очень похоже на старое апи, но есть один нюанс :). Посмотрите на этот код (для примера выбор идет из 2 справочников):

if (CModule::IncludeModule('highloadblock')) {
	// manuf
	$arHLBlock = Bitrix\Highloadblock\HighloadBlockTable::getById(2)->fetch();
	$obEntity = Bitrix\Highloadblock\HighloadBlockTable::compileEntity($arHLBlock);
	$strEntityDataClass = $obEntity->getDataClass();
	$resData = $strEntityDataClass::getList(array(
		'select' => array('ID', 'UF_XML_ID'),
		'filter' => array('UF_NAME' => $brand),
		'order'  => array('ID' => 'ASC'),
		'limit'  => 1,
	));
	if ($arItem = $resData->Fetch()) {
		echo $brandID = $arItem['UF_XML_ID'];
	}
	// colors
	$arHLBlock = Bitrix\Highloadblock\HighloadBlockTable::getById(1)->fetch();
	$obEntity = Bitrix\Highloadblock\HighloadBlockTable::compileEntity($arHLBlock);
	$strEntityDataClass = $obEntity->getDataClass();
	$resData = $strEntityDataClass::getList(array(
		'select' => array('ID', 'UF_NAME', 'UF_XML_ID'),
		'filter' => array('UF_NAME' => [$color, $next_color, $module]),
		'order'  => array('ID' => 'ASC'),
		'limit'  => 3,
	));
	while ($arItem = $resData->Fetch()) {
		if ($arItem['UF_NAME'] == $color)
			$color_1 = $arItem['UF_XML_ID'];
		if ($arItem['UF_NAME'] == $next_color)
			$color_2 = $arItem['UF_XML_ID'];
		if ($arItem['UF_NAME'] == $module)
			$color_3 = $arItem['UF_XML_ID'];
	}

}

В первом случае мы получаем информацию из списка брендов. Во втором – смотрим в справочников цветов. Разница лишь в том, что мы передаем сразу массив значений, чтобы не городить одинаковый код под каждое значение – инфоблок то один 🙂 .

Из интересного, при создании нового элемента и привязки используется именно UF_XML_ID:

$PROP['COLOR'] = $color_1;
$PROP['NEXT_COLOR'] = $color_2;
$PROP['MODULE'] = $color_3;

По данной теме была другая статья, рекомендую ее прочесть:
https://forwww.com/bitrix-highload-block/

автор: Dmitriy

З 2011 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

Залишити відповідь