• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/lib/component/elementlist.php
  • Класс: BitrixIblockComponentElementList
  • Вызов: ElementList::onPrepareComponentParams
public function onPrepareComponentParams($params)
{
	if (!is_array($params))
	{
		$params = [];
	}
	$params = parent::onPrepareComponentParams($params);
	$this->makeMagicWithPageNavigation();

	// compatibility with 'ELEMENT_COUNT' components
	if (isset($params['ELEMENT_COUNT']))
	{
		$params['PAGE_ELEMENT_COUNT'] = $params['ELEMENT_COUNT'];
	}

	// PREDICT_ELEMENT_COUNT - hidden parameter to get elements count from "PRODUCT_ROW_VARIANTS" instead of "PAGE_ELEMENT_COUNT"
	if (isset($params['PREDICT_ELEMENT_COUNT']) && $params['PREDICT_ELEMENT_COUNT'] === 'Y' && !empty($params['PRODUCT_ROW_VARIANTS']))
	{
		$isBigData = $this->request->get('bigData') === 'Y';
		$params['PRODUCT_ROW_VARIANTS'] = static::parseJsonParameter($params['PRODUCT_ROW_VARIANTS']);
		$params['PAGE_ELEMENT_COUNT'] = static::predictElementCountByVariants($params['PRODUCT_ROW_VARIANTS'], $isBigData);
	}

	$params['PAGE_ELEMENT_COUNT'] = (int)($params['PAGE_ELEMENT_COUNT'] ?? 0);
	$params['ELEMENT_COUNT'] = (int)($params['ELEMENT_COUNT'] ?? 0);
	$params['LINE_ELEMENT_COUNT'] = (int)($params['LINE_ELEMENT_COUNT'] ?? 3);

	$params['INCLUDE_SUBSECTIONS'] ??= '';
	if (!in_array(
		$params['INCLUDE_SUBSECTIONS'],
		[
			'Y',
			'A',
			'N',
		]
	))
	{
		$params['INCLUDE_SUBSECTIONS'] = 'Y';
	}

	$params['HIDE_NOT_AVAILABLE'] ??= '';
	if ($params['HIDE_NOT_AVAILABLE'] !== 'Y' && $params['HIDE_NOT_AVAILABLE'] !== 'L')
	{
		$params['HIDE_NOT_AVAILABLE'] = 'N';
	}

	$params['HIDE_NOT_AVAILABLE_OFFERS'] ??= '';
	if ($params['HIDE_NOT_AVAILABLE_OFFERS'] !== 'Y' && $params['HIDE_NOT_AVAILABLE_OFFERS'] !== 'L')
	{
		$params['HIDE_NOT_AVAILABLE_OFFERS'] = 'N';
	}

	$params['FILTER_NAME'] = trim((string)($params['FILTER_NAME'] ?? ''));
	// ajax request doesn't have access to page $GLOBALS
	if (isset($params['GLOBAL_FILTER']))
	{
		$this->globalFilter = $params['GLOBAL_FILTER'];
	}
	else
	{
		if (
			$params['FILTER_NAME'] !== ''
			&& preg_match(self::PARAM_TITLE_MASK, $params['FILTER_NAME'])
			&& isset($GLOBALS[$params['FILTER_NAME']])
			&& is_array($GLOBALS[$params['FILTER_NAME']])
		)
		{
			$this->globalFilter = $GLOBALS[$params['FILTER_NAME']];
		}

		if (isset($this->globalFilter['FACET_OPTIONS']) && count($this->globalFilter) == 1)
		{
			unset($this->globalFilter['FACET_OPTIONS']);
		}

		// save global filter for ajax request params
		$this->arResult['ORIGINAL_PARAMETERS']['GLOBAL_FILTER'] = $this->globalFilter;
	}

	$productMappingFilter = [];
	if (
		Loader::includeModule('catalog')
		&& CatalogProductSystemFieldProductMapping::isAllowed()
	)
	{
		$productMappingFilter = CatalogProductSystemFieldProductMapping::getExtendedFilterByArea(
			[],
			CatalogProductSystemFieldProductMapping::MAP_LANDING
		);
	}
	$params['CACHE_FILTER'] = isset($params['CACHE_FILTER']) && $params['CACHE_FILTER'] === 'Y';
	if (
		!$params['CACHE_FILTER']
		&& !empty($this->globalFilter)
		&& array_diff_assoc($this->globalFilter, $productMappingFilter)
	)
	{
		$params['CACHE_TIME'] = 0;
	}

	$params = $this->prepareElementSortRow(
		$params,
		['ORDER' => 'ELEMENT_SORT_FIELD', 'DIRECTION' => 'ELEMENT_SORT_ORDER'],
		['ORDER' => 'SORT', 'DIRECTION' => 'asc']
	);

	$params = $this->prepareElementSortRow(
		$params,
		['ORDER' => 'ELEMENT_SORT_FIELD2', 'DIRECTION' => 'ELEMENT_SORT_ORDER2'],
		['ORDER' => 'ID', 'DIRECTION' => 'desc']
	);

	$params['PAGER_BASE_LINK_ENABLE'] = (string)($params['PAGER_BASE_LINK_ENABLE'] ?? '');
	$params['PAGER_TITLE'] = (string)($params['PAGER_TITLE'] ?? '');
	$params['PAGER_TEMPLATE'] = (string)($params['PAGER_TEMPLATE'] ?? '');
	$params['PAGER_PARAMS_NAME'] = trim((string)($params['PAGER_PARAMS_NAME'] ?? ''));
	if (
		$params['PAGER_PARAMS_NAME'] !== ''
		&& preg_match(self::PARAM_TITLE_MASK, $params['PAGER_PARAMS_NAME'])
	)
	{
		$this->pagerParameters = $GLOBALS[$params['PAGER_PARAMS_NAME']] ?? [];

		if (!is_array($this->pagerParameters))
		{
			$this->pagerParameters = [];
		}
	}

	if (Loader::includeModule('catalog') && isset($params['CUSTOM_FILTER']) && is_string($params['CUSTOM_FILTER']))
	{
		try
		{
			$params['CUSTOM_FILTER'] = $this->parseCondition(Json::decode($params['CUSTOM_FILTER']), $params);
		}
		catch (Exception $e)
		{
			$params['CUSTOM_FILTER'] = array();
		}
	}
	else
	{
		$params['CUSTOM_FILTER'] = array();
	}

	if ($this->isPaginationMode())
	{
		$this->getPaginationParams($params);
	}

	$this->getSpecificIblockParams($params);

	$params['CALCULATE_SKU_MIN_PRICE'] = (isset($params['CALCULATE_SKU_MIN_PRICE']) && $params['CALCULATE_SKU_MIN_PRICE'] === 'Y');

	return $params;
}