• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/lib/component/elementlist.php
  • Класс: BitrixIblockComponentElementList
  • Вызов: ElementList::getMultiIblockParams
protected function getMultiIblockParams(&$params)
{
	$usePropertyFeatures = IblockModelPropertyFeature::isEnabledFeatures();

	$params['PROPERTY_CODE'] = array();
	$params['CART_PROPERTIES'] = array();
	$params['SHOW_PRODUCTS'] = $params['SHOW_PRODUCTS'] ?? array();

	foreach ($params as $name => $prop)
	{
		$match = array();
		if (preg_match('/^PROPERTY_CODE_(d+)$/', $name, $match))
		{
			$iblockId = (int)$match[1];
			if ($iblockId <= 0)
				continue;

			if (!empty($params[$name]) && is_array($params[$name]))
			{
				foreach ($params[$name] as $k => $v)
				{
					if ($v == '')
					{
						unset($params[$name][$k]);
					}
				}

				$params['PROPERTY_CODE'][$iblockId] = $params[$name];
			}
			unset($params[$match[0]]);
		}
		elseif (preg_match('/^CART_PROPERTIES_(d+)$/', $name, $match))
		{
			$iblockId = (int)$match[1];
			if ($iblockId <= 0)
				continue;

			if (!empty($params[$name]) && is_array($params[$name]))
			{
				foreach ($params[$name] as $k => $v)
				{
					if ($v == '' || $v === '-')
					{
						unset($params[$name][$k]);
					}
				}
				$params['CART_PROPERTIES'][$iblockId] = $params[$name];
			}
			unset($params[$match[0]]);
		}
		elseif (preg_match('/^OFFER_TREE_PROPS_(d+)$/', $name, $match))
		{
			$iblockId = (int)$match[1];
			if ($iblockId <= 0)
				continue;

			if (!empty($params[$name]) && is_array($params[$name]))
			{
				foreach ($params[$name] as $k => $v)
				{
					if ($v == '' || $v === '-')
					{
						unset($params[$name][$k]);
					}
				}

				$params['OFFER_TREE_PROPS'][$iblockId] = $params[$name];
			}
			unset($params[$match[0]]);
		}
		elseif (preg_match('/^SHOW_PRODUCTS_(d+)$/', $name, $match))
		{
			$iblockId = (int)$match[1];
			if ($iblockId <= 0)
				continue;

			if ($params[$name] === 'Y')
			{
				$params['SHOW_PRODUCTS'][$iblockId] = true;
			}

			unset($params[$match[0]]);
		}
		unset($match);
	}

	$parameters = array();

	if (!empty($params['SHOW_PRODUCTS']))
	{
		foreach (array_keys($params['SHOW_PRODUCTS']) as $iblockId)
		{
			$catalog = CCatalogSku::GetInfoByProductIBlock($iblockId);

			// product iblock parameters
			$parameters[$iblockId] = array(
				'PROPERTY_CODE' => $params['PROPERTY_CODE'][$iblockId] ?? array(),
				'CART_PROPERTIES' => (!$usePropertyFeatures && isset($params['CART_PROPERTIES'][$iblockId])
					? $params['CART_PROPERTIES'][$iblockId]
					: array()
				)
			);

			// offers iblock parameters
			if (!empty($catalog))
			{
				$parameters[$iblockId]['OFFERS_FIELD_CODE'] = array('ID', 'CODE', 'NAME', 'SORT', 'PREVIEW_PICTURE', 'DETAIL_PICTURE');
				$parameters[$iblockId]['OFFERS_PROPERTY_CODE'] = $params['PROPERTY_CODE'][$catalog['IBLOCK_ID']] ?? array();
				$parameters[$iblockId]['OFFERS_CART_PROPERTIES'] = (!$usePropertyFeatures && isset($params['CART_PROPERTIES'][$catalog['IBLOCK_ID']])
					? $params['CART_PROPERTIES'][$catalog['IBLOCK_ID']]
					: array()
				);
				$parameters[$iblockId]['OFFERS_TREE_PROPS'] = (!$usePropertyFeatures && isset($params['OFFER_TREE_PROPS'][$catalog['IBLOCK_ID']])
					? $params['OFFER_TREE_PROPS'][$catalog['IBLOCK_ID']]
					: []
				);
			}
		}
	}

	return $parameters;
}