• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/component/gridvariationform.php
  • Класс: BitrixCatalogComponentGridVariationForm
  • Вызов: GridVariationForm::getPropertyDescription
protected function getPropertyDescription(Property $property): array
{
	$description = parent::getPropertyDescription($property);

	if ($description['editable'])
	{
		switch ($description['type'])
		{
			case 'multilist':
				$dropdownItems = [];

				if (!empty($description['data']['items']) && is_array($description['data']['items']))
				{
					$dropdownItems = $description['data']['items'];
				}

				$description['editable'] = [
					'TYPE' => Types::MULTISELECT,
					'DATA' => [
						'ITEMS' => $dropdownItems,
					]
				];
				break;
			case 'list':
				$dropdownItems = [];

				if (!$description['required'])
				{
					$dropdownItems[] = Loc::getMessage('CATALOG_PRODUCT_CARD_VARIATION_GRID_NOT_SELECTED');
				}

				if (!empty($description['data']['items']) && is_array($description['data']['items']))
				{
					foreach ($description['data']['items'] as $item)
					{
						$dropdownItems[$item['VALUE']] = $item['NAME'];
					}
				}
				$description['editable'] = [
					'TYPE' => Types::DROPDOWN,
					'items' => $dropdownItems,
				];
				break;
			case 'custom':
				if ($description['multiple'] === true && $description['propertyCode'] !== 'MORE_PHOTO')
				{
					$description['editable'] = false;
				}
				else
				{
					$description['editable'] = [
						'TYPE' => Types::CUSTOM,
						'NAME' => $description['data']['edit'] ?? $description['name'],
						// 'HTML' => $description['data']['edit'] ?? $description['name'],
					];
				}
				break;
			case 'boolean':
				$description['editable'] = ['TYPE' => Types::CHECKBOX];
				break;
			case 'datetime':
				$description['editable'] = ['TYPE' => Types::DATE];
				break;
			case 'money':
				$description['editable'] = [
					'TYPE' => Types::MONEY,
					'CURRENCY_LIST' => CurrencyManager::getSymbolList(),
					'HTML_ENTITY' => true,
				];
				break;
			default:
				$description['editable'] = ['TYPE' => Types::TEXT];
		}

		$nonEditableUserTypes = [
			'ElementXmlID',
			'employee',
			'map_yandex',
			'map_google',
			'ECrm',
			'video',
			'HTML',
		];
		if (
			$description['settings']['PROPERTY_TYPE'] === PropertyTable::TYPE_ELEMENT
			|| $description['settings']['PROPERTY_TYPE'] === PropertyTable::TYPE_SECTION
			|| in_array($description['settings']['USER_TYPE'], $nonEditableUserTypes, true)
		)
		{
			$description['editable'] = false;
		}
	}

	return $description;
}