Битрикс — выбираем из 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 года. Посмотреть некоторые из моих работ, а также узнать чуть больше обо мне, вы можете на forwww.ru

- Создание сайта на 1С-Битрикс;
- Доработки и правки на рабочем проекте;
- Адаптивная вёрстка и натяжка на Битрикс;
- Выгрузка и Загрузка товаров на сайт;
- Парсинг;
- Интеграции со сторонними сервисами по API;
- Многоязычные версии сайтов и многое другое.

Бесплатно проведу технический аудит вашего сайта, а также дам рекомендации по продвижению проекта. Отвечу на любые вопросы. Пишите :)
E-mail: dmitriyribka@gmail.com
Skype: cinemacreaterus

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *