Столкнулся с небольшой проблемой. Для обычного инфоблока можно выбрать свойство типа справочник, но использовать его в компоненте, например news полностью не получается, т.к. туда выводятся только символьный код и название.
А мне нужно было выводить изображение из справочника. В общем, задача довольно простая, но на всякий случай опубликую решение, может кому то пригодится такая заготовка.
Файл result_modifier для решения подобных проблем:
А мне нужно было выводить изображение из справочника. В общем, задача довольно простая, но на всякий случай опубликую решение, может кому то пригодится такая заготовка.
Файл result_modifier для решения подобных проблем:
<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); use Bitrix\Highloadblock as HL; use Bitrix\Main\Entity; if(count($arResult["PROPERTIES"]["COLORS"]["VALUE"])){ $color_codes = []; foreach($arResult["PROPERTIES"]["COLORS"]["VALUE"] as $color){ $color_codes[] = $color; } CModule::IncludeModule('highloadblock'); $arHLBlock = Bitrix\Highloadblock\HighloadBlockTable::getById(1)->fetch(); // 1 - ID HL(!) инфоблока $obEntity = Bitrix\Highloadblock\HighloadBlockTable::compileEntity($arHLBlock); $strEntityDataClass = $obEntity->getDataClass(); $resData = $strEntityDataClass::getList(array( 'select' => array('UF_FILE','UF_XML_ID'), 'filter' => array('UF_XML_ID' => $color_codes), 'order' => array('ID' => 'ASC'), 'limit' => 100000 )); $ar_res = []; while ($arItem = $resData->Fetch()) { $ar_res[$arItem["UF_XML_ID"]] = $arItem["UF_FILE"]; } if(!is_array($arResult["DISPLAY_PROPERTIES"]["COLORS"]["DISPLAY_VALUE"])){ $arResult["DISPLAY_PROPERTIES"]["COLORS"]["DISPLAY_VALUE"] = array($arResult["DISPLAY_PROPERTIES"]["COLORS"]["DISPLAY_VALUE"]); } foreach($arResult["DISPLAY_PROPERTIES"]["COLORS"]["~VALUE"] as $key=>$color){ // собираем результат $arResult["DISPLAY_PROPERTIES"]["COLORS"]["DISPLAY_VALUE"][$key] = array( 'NAME'=>$arResult["DISPLAY_PROPERTIES"]["COLORS"]["DISPLAY_VALUE"][$key], 'FILE'=>CFile::GetPath($ar_res[$color]) ); } } |