• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/v2/Property/PropertyRepository.php
  • Класс: BitrixCatalogv2PropertyPropertyRepository
  • Вызов: PropertyRepository::getList
protected function getList(array $params): array
{
	$result = [];

	$filter = $params['filter'] ?? [];

	$propertyValuesIterator = CIBlockElement::getPropertyValues($filter['IBLOCK_ID'], $filter, true);
	while ($propertyValues = $propertyValuesIterator->fetch())
	{
		$descriptions = $propertyValues['DESCRIPTION'] ?? [];
		$propertyValueIds = $propertyValues['PROPERTY_VALUE_ID'] ?? [];
		$elementId = $propertyValues['IBLOCK_ELEMENT_ID'];
		unset($propertyValues['IBLOCK_ELEMENT_ID'], $propertyValues['PROPERTY_VALUE_ID'], $propertyValues['DESCRIPTION']);

		$entityFields = [];
		// ToDo empty properties with false (?: '') or null?
		foreach ($propertyValues as $id => $value)
		{
			$entityFields[$id] = [];
			$description = $descriptions[$id] ?? null;

			if ($value !== false || $description !== null)
			{
				if (is_array($value))
				{
					foreach ($value as $key => $item)
					{
						$fields = [
							'VALUE' => $item ?? '',
							'DESCRIPTION' => empty($description[$key]) ? null : $description[$key],
						];

						if (isset($propertyValueIds[$id][$key]))
						{
							$fields['ID'] = $propertyValueIds[$id][$key];
						}

						$entityFields[$id][$key] = $fields;
					}
				}
				else
				{
					$fields = [
						'VALUE' => $value ?? '',
						'DESCRIPTION' => empty($descriptions[$id]) ? null : $descriptions[$id],
					];

					if (isset($propertyValueIds[$id]))
					{
						$fields['ID'] = $propertyValueIds[$id];
					}

					$entityFields[$id][] = $fields;
				}
			}
		}

		$result[$elementId] = $entityFields;
	}

	return $result;
}