• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/component/gridvariationform.php
  • Класс: BitrixCatalogComponentGridVariationForm
  • Вызов: GridVariationForm::getColumnValues
public function getColumnValues(bool $allowDefaultValues = true): array
{
	$values = $this->getShowedValues($allowDefaultValues);

	foreach ($this->getGridHeaders() as $description)
	{
		$name = $description['id'];
		if (!isset($values[$name]))
		{
			continue;
		}

		$currentValue = $values[$name];

		switch ($description['type'])
		{
			case 'string':
			case 'text':
				if (!empty($values[$name]))
				{
					$values[$name] = HtmlFilter::encode($values[$name]);
				}
				break;
			case 'number':
				$values[$name] = (float)($values[$name] ?: 0);
				break;
			case 'multilist':
				if (is_array($currentValue))
				{
					$formatted = [];
					$items = [];

					foreach ($description['data']['items'] as $item)
					{
						$items[$item['VALUE']] = $item['HTML'] ?? HtmlFilter::encode($item['NAME']);
					}

					foreach ($currentValue as $multipleItemValue)
					{
						$formatted[] = $items[$multipleItemValue];
					}

					$values[$name] = $formatted;
				}
				break;
			case 'boolean':
				$code = '';
				if (
					$description['id'] === static::formatFieldName('ACTIVE')
					|| $description['id'] === static::formatFieldName('AVAILABLE')
					|| $description['id'] === static::formatFieldName('VAT_INCLUDED')
				)
				{
					$code = $currentValue === 'Y' ? 'YES' : 'NO';
				}
				else
				{
					$code = ($currentValue !== '') ? 'YES' : 'NO';
				}
				$values[$name] = Loc::getMessage('CATALOG_PRODUCT_CARD_VARIATION_GRID_VALUE_' . $code);
				break;
			case 'list':
				if (isset($description['editable']['items']))
				{
					$values[$name] = HtmlFilter::encode($description['editable']['items'][$currentValue] ?? '');
					break;
				}
				foreach ($description['data']['items'] as $item)
				{
					if ($currentValue === $item['VALUE'])
					{
						$values[$name] = HtmlFilter::encode($item['NAME'] ?? '');
						break;
					}
				}
				break;
			case 'custom':
				$values[$name] = $values[$description['data']['view']];
				break;
			case 'user':
				$values[$name] = HtmlFilter::encode($values[$name . '_FORMATTED_NAME'] ?? '');
				break;
			case 'readOnlyVat':
				$currentVat = (int)$values[$name];
				$values[$name] = '';
				if ($currentVat > 0)
				{
					foreach ($this->getVats() as $vat)
					{
						if ((int)$vat['ID'] === $currentVat)
						{
							$values[$name] = htmlspecialcharsbx($vat['NAME']);
							break;
						}
					}
				}
				break;
			case 'barcode':
				$barcodes =
					is_array($values[$name])
						? array_column($values[$name], 'BARCODE')
						: null
				;

				$values[$name] = $barcodes ? htmlspecialcharsbx(implode(', ', $barcodes)) : '';
				break;
			case 'money':
				if (isset($description['data']['isProductProperty']) && $description['data']['isProductProperty'])
				{
					$separatedValues = IblockMoneyProperty::getSeparatedValues($values[$name]);
					$amount = (float)($separatedValues['AMOUNT'] . '.' . $separatedValues['DECIMALS']);
					$currency = $separatedValues['CURRENCY'];
					$values[$name] = CCurrencyLang::CurrencyFormat($amount, $currency, true);
				}
				break;
		}

		if (is_array($values[$name]))
		{
			$values[$name] = implode(', ', $values[$name]);
		}
	}

	return $values;
}