• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/lib/component/base.php
  • Класс: BitrixIblockComponentBase
  • Вызов: Base::getSeparateList
protected function getSeparateList(array $params)
{
	$list = [];

	$selectFields = ['ID', 'IBLOCK_ID'];
	if (!empty($params['order']))
	{
		$selectFields = array_unique(array_merge(
			$selectFields,
			array_keys($params['order'])
		));
	}

	$iterator = CIBlockElement::GetList(
		$params['order'],
		$params['filter'],
		false,
		$params['navigation'],
		$selectFields
	);
	while ($row = $iterator->Fetch())
	{
		$id = (int)$row['ID'];
		$list[$id] = [
			'ID' => $row['ID'],
			'IBLOCK_ID' => $row['IBLOCK_ID'],
		];
	}
	unset($row);

	if (!empty($list))
	{
		$fullIterator = CIBlockElement::GetList(
			[],
			['IBLOCK_ID' => $params['filter']['IBLOCK_ID'], 'ID' => array_keys($list), 'SITE_ID' => $this->getSiteId()],
			false,
			false,
			$params['select']
		);
		while ($row = $fullIterator->Fetch())
		{
			$id = (int)$row['ID'];
			$list[$id] = $list[$id] + $row;
		}
		unset($row, $fullIterator);

		$iterator->InitFromArray(array_values($list));
	}

	return $iterator;
}