• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/UI/PropertyProduct.php
  • Класс: BitrixCatalogUIPropertyProduct
  • Вызов: PropertyProduct::getIblockProperties
static function getIblockProperties(int $iblockId, int $productId, array $filter = []): array
{
	$result = [];

	$filter['ACTIVE'] = 'Y';

	$props = CIBlockElement::GetProperty($iblockId, $productId, 'id', 'asc', $filter);
	while ($prop = $props->GetNext())
	{
		if (empty($prop['VALUE'])
			&& !($prop['PROPERTY_TYPE'] === 'L' && $prop['LIST_TYPE'] === 'C')
		)
		{
			continue;
		}

		$code = 'PROPERTY_' . $prop['ID'];

		switch ($prop['PROPERTY_TYPE'])
		{
			case PropertyTable::TYPE_STRING:
			case PropertyTable::TYPE_NUMBER:
				if ($prop['USER_TYPE'] === PropertyTable::USER_TYPE_DIRECTORY
					&& isset($prop['USER_TYPE_SETTINGS']['TABLE_NAME'])
					&& Loader::includeModule('highloadblock')
				)
				{
					$value = self::getDirectoryValue($prop);
				}
				else if ($prop['USER_TYPE'] === PropertyTable::USER_TYPE_HTML)
				{
					$value = (new CBXSanitizer())->SanitizeHtml($prop['~VALUE']['TEXT']);
				}
				else
				{
					$value = $prop['VALUE'];
				}

				if (!isset($result[$code]))
				{
					$result[$code] = $value;
				}
				else
				{
					$result[$code] .= ', ' . $value;
				}

				break;
			case PropertyTable::TYPE_LIST:
				if ($prop['LIST_TYPE'] === PropertyTable::CHECKBOX)
				{
					switch ($prop['VALUE_ENUM'])
					{
						case 'Y':
							$value = Loc::getMessage('CRM_ENTITY_PRODUCT_LIST_COLUMN_CHECKBOX_YES');
							break;
						case 'N':
						case '':
							$value = Loc::getMessage('CRM_ENTITY_PRODUCT_LIST_COLUMN_CHECKBOX_NO');
							break;
						default:
							$value = htmlspecialcharsbx($prop['VALUE_ENUM']);
					}
					$result[$code] = $value;

					break;
				}

				if ($prop['MULTIPLE'] !== 'Y')
				{
					$result[$code] = $prop['VALUE_ENUM'];

					break;
				}

				if (!isset($result[$code]))
				{
					$result[$code] = $prop['VALUE_ENUM'];
				}
				else
				{
					$result[$code] .= ', ' . $prop['VALUE_ENUM'];
				}

				break;
			case PropertyTable::TYPE_FILE:
				Loader::includeModule('fileman'); // always exists
				$listImageSize = (int)Option::get('iblock', 'list_image_size');
				$minImageSize = [
					'W' => 1,
					'H' => 1,
				];
				$maxImageSize = [
					'W' => $listImageSize,
					'H' => $listImageSize,
				];
				$result[$code] ??= '';
				$result[$code] .= CFileInput::Show(
					'NO_FIELDS[' . $productId . ']',
					$prop['VALUE'],
					[
						'IMAGE' => 'Y',
						'PATH' => 'Y',
						'FILE_SIZE' => 'Y',
						'DIMENSIONS' => 'Y',
						'IMAGE_POPUP' => 'N',
						'MAX_SIZE' => $maxImageSize,
						'MIN_SIZE' => $minImageSize,
					],
					[
						'upload' => false,
						'medialib' => false,
						'file_dialog' => false,
						'cloud' => false,
						'del' => false,
						'description' => false,
					]
				);

				break;
			default:
				$result[$code] = htmlspecialcharsbx($prop['VALUE']);
		}
	}

	return $result;
}