- Модуль: iblock
- Путь к файлу: ~/bitrix/modules/iblock/classes/general/comp_formatprops.php
- Класс: CIBlockFormatProperties
- Вызов: CIBlockFormatProperties::GetDisplayValue
static function GetDisplayValue($arItem, $arProperty, $event1 = '')
{
if (self::$b24Installed === null)
{
self::$b24Installed = ModuleManager::isModuleInstalled('bitrix24');
}
$arProperty['RAW_PROPERTY_TYPE'] = $arProperty['PROPERTY_TYPE'];
/** @var array $arUserTypeFormat */
$arUserTypeFormat = false;
if (!empty($arProperty['USER_TYPE']))
{
$userTypeId = $arProperty['USER_TYPE'];
if (!isset(self::$userTypeCache[$userTypeId]))
{
self::$userTypeCache[$userTypeId] = false;
$arUserType = CIBlockProperty::GetUserType($userTypeId);
if (isset($arUserType['GetPublicViewHTML']))
{
self::$userTypeCache[$userTypeId] = $arUserType['GetPublicViewHTML'];
}
unset($arUserType);
}
$arUserTypeFormat = self::$userTypeCache[$userTypeId];
}
if ($arUserTypeFormat)
{
$arProperty['PROPERTY_TYPE'] = self::USER_TYPE;
if ($arProperty['MULTIPLE'] === 'N' || !is_array($arProperty['~VALUE']))
{
$arValues = [$arProperty['~VALUE']];
}
else
{
$arValues = $arProperty['~VALUE'];
}
}
else
{
if (is_array($arProperty['VALUE']))
{
$arValues = $arProperty['VALUE'];
}
else
{
$arValues = [$arProperty['VALUE']];
}
}
$arDisplayValue = [];
switch ($arProperty['PROPERTY_TYPE'])
{
case self::USER_TYPE:
foreach ($arValues as $val)
{
$arDisplayValue[] = (string)call_user_func_array(
$arUserTypeFormat,
[
$arProperty,
['VALUE' => $val],
[],
]
);
}
break;
case PropertyTable::TYPE_ELEMENT:
$arLinkElements = [];
foreach ($arValues as $val)
{
$val = (int)$val;
if ($val > 0)
{
if (!isset(self::$nameCache[PropertyTable::TYPE_ELEMENT][$val]))
{
//USED TO GET "LINKED" ELEMENTS
$rsLink = CIBlockElement::GetList(
[],
[
'ID' => $val,
'ACTIVE' => 'Y',
'ACTIVE_DATE' => 'Y',
'CHECK_PERMISSIONS' => 'Y',
'MIN_PERMISSION' => CIBlockRights::PUBLIC_READ,
],
false,
false,
[
'ID',
'IBLOCK_ID',
'NAME',
'DETAIL_PAGE_URL',
'PREVIEW_PICTURE',
'DETAIL_PICTURE',
'SORT',
]
);
self::$nameCache[PropertyTable::TYPE_ELEMENT][$val] = $rsLink->GetNext();
unset($rsLink);
}
if (is_array(self::$nameCache[PropertyTable::TYPE_ELEMENT][$val]))
{
$row = self::$nameCache[PropertyTable::TYPE_ELEMENT][$val];
if (self::$b24Installed)
{
$arDisplayValue[] = $row['NAME'];
}
else
{
$arDisplayValue[] = '' . $row['NAME'] . '';
}
$arLinkElements[$val] = $row;
unset($row);
}
}
}
$arProperty['LINK_ELEMENT_VALUE'] = (!empty($arLinkElements) ? $arLinkElements : false);
unset($arLinkElements);
break;
case PropertyTable::TYPE_SECTION:
$arLinkSections = [];
foreach ($arValues as $val)
{
$val = (int)$val;
if ($val > 0)
{
if (!isset(self::$nameCache[PropertyTable::TYPE_SECTION][$val]))
{
//USED TO GET SECTIONS NAMES
$rsSection = CIBlockSection::GetList(
[],
[
'ID' => $val,
'CHECK_PERMISSIONS' => 'Y',
'MIN_PERMISSION' => CIBlockRights::PUBLIC_READ,
],
false,
[
'ID',
'IBLOCK_ID',
'NAME',
'SECTION_PAGE_URL',
'PICTURE',
'DETAIL_PICTURE',
'SORT',
]
);
self::$nameCache[PropertyTable::TYPE_SECTION][$val] = $rsSection->GetNext();
unset($rsSection);
}
if (is_array(self::$nameCache[PropertyTable::TYPE_SECTION][$val]))
{
$row = self::$nameCache[PropertyTable::TYPE_SECTION][$val];
if (self::$b24Installed)
{
$arDisplayValue[] = $row['NAME'];
}
else
{
$arDisplayValue[] = '' . $row['NAME'] . '';
}
$arLinkSections[$val] = self::$nameCache[PropertyTable::TYPE_SECTION][$val];
}
}
}
$arProperty['LINK_SECTION_VALUE'] = (!empty($arLinkSections) ? $arLinkSections : false);
unset($arLinkSections);
break;
case PropertyTable::TYPE_LIST:
$isCheckBox = Tools::isCheckboxProperty($arProperty);
foreach ($arValues as $val)
{
$val = (string)$val;
if ($isCheckBox)
{
if ($val === Tools::CHECKBOX_VALUE_YES)
{
$arDisplayValue[] = Loc::getMessage('IBLOCK_FORMATPROPS_PROPERTY_YES');
}
else
{
$arDisplayValue[] = Loc::getMessage('IBLOCK_FORMATPROPS_PROPERTY_NO');
}
}
else
{
if ($val !== '')
{
$arDisplayValue[] = $val;
}
}
}
unset($isCheckBox);
break;
case PropertyTable::TYPE_FILE:
$arFiles = [];
foreach ($arValues as $val)
{
if ($arFile = CFile::GetFileArray($val))
{
$arFiles[] = $arFile;
$arDisplayValue[] =
''
. Loc::getMessage('IBLOCK_DOWNLOAD')
. ''
;
}
}
$fileCount = count($arFiles);
if ($fileCount == 1)
{
$arProperty['FILE_VALUE'] = $arFiles[0];
}
elseif ($fileCount > 1)
{
$arProperty['FILE_VALUE'] = $arFiles;
}
else
{
$arProperty['FILE_VALUE'] = false;
}
unset($fileCount, $arFiles);
break;
default:
foreach ($arValues as $val)
{
$trimmed = trim((string)$val);
if (strpos($trimmed, 'http') === 0)
{
$arDisplayValue[] = '' . $trimmed . '';
}
elseif (strpos($trimmed, 'www') === 0)
{
$arDisplayValue[] = '' . $trimmed . '';
}
else
{
$arDisplayValue[] = $val;
}
}
break;
}
$displayCount = count($arDisplayValue);
if ($displayCount == 1)
{
$arProperty['DISPLAY_VALUE'] = $arDisplayValue[0];
}
elseif ($displayCount > 1)
{
$arProperty['DISPLAY_VALUE'] = $arDisplayValue;
}
else
{
$arProperty['DISPLAY_VALUE'] = false;
}
$arProperty['PROPERTY_TYPE'] = $arProperty['RAW_PROPERTY_TYPE'];
unset($arProperty['RAW_PROPERTY_TYPE']);
return $arProperty;
}