- Модуль: 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;
}