• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/v2/BaseIblockElementRepository.php
  • Класс: BitrixCatalogv2BaseIblockElementRepository
  • Вызов: BaseIblockElementRepository::getList
protected function getList(array $params): array
{
	$filter = $params['filter'] ?? [];
	$order = $params['order'] ?? [];
	$nav = $params['nav'] ?? false;

	$iblockElements = [];
	$listIds = [];

	$iterator = CIBlockElement::GetList(
		$order,
		array_merge(
			$filter,
			$this->getAdditionalFilter(),
			$this->getAdditionalProductFilter(),
		),
		false,
		$nav,
		[
			'ID',
			'IBLOCK_ID',
		],
	);
	while ($row = $iterator->fetch())
	{
		$id = (int)$row['ID'];
		$iblockElements[$id] = $row;
		$listIds[] = $id;
	}
	unset($iterator);

	if (empty($iblockElements))
	{
		return [];
	}

	$elementSelect = $this->getDefaultElementSelect();
	$detailUrlTemplate = $this->checkAutoloadDetailUrl() ? $this->getDetailUrlTemplate() : null;
	$specificFields = [
		'QUANTITY_TRACE' => 'QUANTITY_TRACE_ORIG',
		'CAN_BUY_ZERO' => 'CAN_BUY_ZERO_ORIG',
		'SUBSCRIBE' => 'SUBSCRIBE_ORIG',
	];
	$productSelect = array_merge(['*', 'UF_*'], array_values($specificFields));

	foreach (array_chunk($listIds, CATALOG_PAGE_SIZE) as $pageIds)
	{
		$elementsIterator = CIBlockElement::GetList(
			[],
			[
				'ID' => $pageIds,
				'CHECK_PERMISSIONS' => 'N',
				'SHOW_NEW' => 'Y',
			],
			false,
			false,
			$elementSelect,
		);
		if ($detailUrlTemplate)
		{
			$elementsIterator->SetUrlTemplates($detailUrlTemplate);
		}
		while ($element = $elementsIterator->getNext())
		{
			$id = (int)$element['ID'];
			$iblockElements[$id] += $this->replaceRawFromTilda($element);
		}
		unset($elementsIterator);

		$productIterator = ProductTable::getList([
			'select' => $productSelect,
			'filter' => [
				'@ID' => $pageIds,
			],
		]);
		while ($product = $productIterator->fetch())
		{
			$id = (int)$product['ID'];
			unset($product['ID']);
			foreach ($specificFields as $field => $originalField)
			{
				$product[$field] = $product[$originalField];
				unset($product[$originalField]);
			}
			$iblockElements[$id] += $product;
		}
		unset($productIterator);
	}

	return $iblockElements;
}