Вот так можно получить множественное пользовательское свойство (или поле) у секции(раздела) инф. блока:
Содержимое файла result_modifier.php, содержащийся в шаблоне компонента
bitrix:catalog.section.list
Нужно обратить внимание на четвёртый параметр CIBlockSection::GetList
| Код |
|---|
//0. user enum field code
$CODE = "UF_CS";
//1. Local cache
$arEnumsCache = array();
$arResultSectionsByID = array();
foreach ($arResult['SECTIONS'] as $key => $arSection)
$arResultSectionsByID[$arSection["ID"]] = &$arResult['SECTIONS'][$key];
//2. Make same GetList as component did
$arFilter = array(
"ACTIVE" => "Y",
"GLOBAL_ACTIVE" => "Y",
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
);
if($arResult["SECTION"]["ID"] > 0)
{
$arFilter["LEFT_MARGIN"]=$arResult["SECTION"]["LEFT_MARGIN"]+1;
$arFilter["RIGHT_MARGIN"]=$arResult["SECTION"]["RIGHT_MARGIN"];
$arFilter["<="."DEPTH_LEVEL"]=$arResult["SECTION"]["DEPTH_LEVEL"] + $arParams["TOP_DEPTH"];
}
else
{
$arFilter["<="."DEPTH_LEVEL"] = $arParams["TOP_DEPTH"];
}
$rsSections = CIBlockSection::GetList(array(), $arFilter, false, array("ID", $CODE));
while($arSection = $rsSections->Fetch())
{
//3. Check if section is in the result
if(array_key_exists($arSection["ID"], $arResultSectionsByID))
{
//4. Simplify processing of single/multile properties
if(!is_array($arSection[$CODE]))
$arSection[$CODE] = array($arSection[$CODE]);
foreach($arSection[$CODE] as $UF_ID)
{
if($UF_ID > 0)
{
//5. Check for local cache
if(!array_key_exists($UF_ID, $arEnumsCache))
{
$rsEnum = CUserFieldEnum::GetList(array(), array("ID" => $UF_ID));
$arEnumsCache[$UF_ID] = $rsEnum->GetNext();
}
//6. Modify result
$arResultSectionsByID[$arSection["ID"]][$CODE][] = $arEnumsCache[$UF_ID]["VALUE"];
}
}
}
}
|