Столкнулся с небольшой проблемой. Для обычного инфоблока можно выбрать свойство типа справочник, но использовать его в компоненте, например 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])
);
}
}
|