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