• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/lib/landingsource/dataloader.php
  • Класс: BitrixIblockLandingSourceDataLoader
  • Вызов: DataLoader::loadProduct
static function loadProduct(array &$result, array $fields)
	{
		$select = ['ID'];
		$descr = [];

		foreach ($fields as $index => $item)
		{
			if (is_array($item))
			{
				if (isset($item['COMPILE']))
				{
					$select = array_merge($select, $item['COMPILE']['FIELDS']);
				}
				else
				{
					$select[] = $item['ID'];
				}
				$descr[$index] = $item;
			}
			elseif (is_bool($item))
			{
				$select[] = $index;
				$descr[$index] = ['ID' => $index];
			}
		}

		$iterator = CatalogProductTable::getList([
			'select' => $select,
			'filter' => ['@ID' => array_keys($result)]
		]);
		while ($row = $iterator->fetch())
		{
			$id = (int)$row['ID'];
			foreach ($descr as $item)
			{
				$fieldId = $item['ID'];
				$result[$id][$fieldId] = null;
				if (isset($item['COMPILE']))
				{
					$value = [];
					foreach ($item['COMPILE']['FIELDS'] as $index)
					{
						if ($row[$index] === null)
							continue;
						$value[] = $row[$index];
					}
					if (!empty($value))
						$result[$id][$fieldId] = implode($item['COMPILE']['SEPARATOR'], $value);
				}
				else
				{
					if ($fieldId == 'AVAILABLE')
						$row[$fieldId] = ($row[$fieldId] == 'Y'
							? Loc::getMessage('PRODUCT_FIELD_STATUS_YES')
							: Loc::getMessage('PRODUCT_FIELD_STATUS_NO')
						);
					$result[$id][$fieldId] = $row[$fieldId];
				}
			}
		}
		unset($row, $iterator);
	}