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

	if (!isset($params['CURRENT_BASE_PAGE']))
	{
		$uri = new MainWebUri($this->request->getRequestUri());
		$uri->deleteParams(MainHttpRequest::getSystemParameters());
		$params['CURRENT_BASE_PAGE'] = $uri->getUri();
	}

	// parent component params for correct template load through ajax
	if (!isset($params['PARENT_NAME']) && $parent = $this->getParent())
	{
		$params['PARENT_NAME'] = $parent->getName();
		$params['PARENT_TEMPLATE_NAME'] = $parent->getTemplateName();
		$params['PARENT_TEMPLATE_PAGE'] = $parent->getTemplatePage();
	}

	// save original parameters for further ajax requests
	$this->arResult['ORIGINAL_PARAMETERS'] = $params;

	if (isset($params['CUSTOM_SITE_ID']) && is_string($params['CUSTOM_SITE_ID']))
	{
		$this->setSiteId($params['CUSTOM_SITE_ID']);
	}

	// for AJAX_MODE set original ajax_id from initial load
	if (isset($params['AJAX_MODE']) && $params['AJAX_MODE'] === 'Y')
	{
		$ajaxId = $this->request->get('AJAX_ID');
		if (!empty($ajaxId))
		{
			$params['AJAX_ID'] = $ajaxId;
		}
		unset($ajaxId);
	}
	$params['AJAX_ID'] = trim((string)($params['AJAX_ID'] ?? ''));

	$params['CACHE_TIME'] = (int)($params['CACHE_TIME'] ?? 36000000);

	$params['IBLOCK_ID'] = (int)($params['IBLOCK_ID'] ?? 0);
	$params['SECTION_ID'] = (int)($params['SECTION_ID'] ?? 0);

	$params['SECTION_CODE'] = trim((string)($params['SECTION_CODE'] ?? ''));
	$params['SECTION_URL'] = trim((string)($params['SECTION_URL'] ?? ''));
	$params['STRICT_SECTION_CHECK'] = isset($params['STRICT_SECTION_CHECK']) && $params['STRICT_SECTION_CHECK'] === 'Y';

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

	$params['DETAIL_URL'] = trim((string)($params['DETAIL_URL'] ?? ''));
	$params['BASKET_URL'] = trim((string)($params['BASKET_URL'] ?? ''));
	if ($params['BASKET_URL'] === '')
	{
		$params['BASKET_URL'] = '/personal/basket.php';
	}

	$params['SHOW_SKU_DESCRIPTION'] = $params['SHOW_SKU_DESCRIPTION'] ?? 'N';

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

	$params['ACTION_VARIABLE'] = trim((string)($params['ACTION_VARIABLE'] ?? ''));
	if ($params['ACTION_VARIABLE'] === '' || !preg_match(self::PARAM_TITLE_MASK, $params['ACTION_VARIABLE']))
	{
		$params['ACTION_VARIABLE'] = 'action';
	}

	$params['PRODUCT_ID_VARIABLE'] = trim((string)($params['PRODUCT_ID_VARIABLE'] ?? ''));
	if (
		$params['PRODUCT_ID_VARIABLE'] === ''
		|| !preg_match(self::PARAM_TITLE_MASK, $params['PRODUCT_ID_VARIABLE'])
	)
	{
		$params['PRODUCT_ID_VARIABLE'] = 'id';
	}

	$params['ACTION_COMPARE_VARIABLE'] = trim((string)($params['ACTION_COMPARE_VARIABLE'] ?? ''));
	if (
		$params['ACTION_COMPARE_VARIABLE'] === ''
		|| !preg_match(self::PARAM_TITLE_MASK, $params['ACTION_COMPARE_VARIABLE'])
	)
	{
		$params['ACTION_COMPARE_VARIABLE'] = $params['ACTION_VARIABLE'];
	}

	$params['PRODUCT_QUANTITY_VARIABLE'] = trim((string)($params['PRODUCT_QUANTITY_VARIABLE'] ?? ''));
	if (
		$params['PRODUCT_QUANTITY_VARIABLE'] === ''
		|| !preg_match(self::PARAM_TITLE_MASK, $params['PRODUCT_QUANTITY_VARIABLE'])
	)
	{
		$params['PRODUCT_QUANTITY_VARIABLE'] = 'quantity';
	}

	$params['PRODUCT_PROPS_VARIABLE'] = trim((string)($params['PRODUCT_PROPS_VARIABLE'] ?? ''));
	if (
		$params['PRODUCT_PROPS_VARIABLE'] === ''
		|| !preg_match(self::PARAM_TITLE_MASK, $params['PRODUCT_PROPS_VARIABLE'])
	)
	{
		$params['PRODUCT_PROPS_VARIABLE'] = 'prop';
	}

	// landing mode
	if (
		isset($params['ALLOW_SEO_DATA'])
		&& ($params['ALLOW_SEO_DATA'] === 'Y' || $params['ALLOW_SEO_DATA'] === 'N')
	)
	{
		$params['SET_TITLE'] = $params['ALLOW_SEO_DATA'] === 'Y';
		$params['SET_BROWSER_TITLE'] = $params['ALLOW_SEO_DATA'];
		$params['SET_META_KEYWORDS'] = $params['ALLOW_SEO_DATA'];
		$params['SET_META_DESCRIPTION'] = $params['ALLOW_SEO_DATA'];
	}
	else
	{
		$params['SET_TITLE'] = ($params['SET_TITLE'] ?? '') !== 'N';
		$params['SET_BROWSER_TITLE'] = isset($params['SET_BROWSER_TITLE']) && $params['SET_BROWSER_TITLE'] === 'N' ? 'N' : 'Y';
		$params['SET_META_KEYWORDS'] = isset($params['SET_META_KEYWORDS']) && $params['SET_META_KEYWORDS'] === 'N' ? 'N' : 'Y';
		$params['SET_META_DESCRIPTION'] = isset($params['SET_META_DESCRIPTION']) && $params['SET_META_DESCRIPTION'] === 'N' ? 'N' : 'Y';
	}
	$params['SET_LAST_MODIFIED'] = isset($params['SET_LAST_MODIFIED']) && $params['SET_LAST_MODIFIED'] === 'Y';
	$params['ADD_SECTIONS_CHAIN'] = isset($params['ADD_SECTIONS_CHAIN']) && $params['ADD_SECTIONS_CHAIN'] === 'Y';

	$params['DISPLAY_COMPARE'] = isset($params['DISPLAY_COMPARE']) && $params['DISPLAY_COMPARE'] === 'Y';
	$params['COMPARE_PATH'] = trim((string)($params['COMPARE_PATH'] ?? ''));
	$params['COMPARE_NAME'] = trim((string)($params['COMPARE_NAME'] ?? ''));
	if ($params['COMPARE_NAME'] === '')
	{
		$params['COMPARE_NAME'] = 'CATALOG_COMPARE_LIST';
	}
	$params['USE_COMPARE_LIST'] = (isset($params['USE_COMPARE_LIST']) && $params['USE_COMPARE_LIST'] === 'Y' ? 'Y' : 'N');

	$params['USE_PRICE_COUNT'] = isset($params['USE_PRICE_COUNT']) && $params['USE_PRICE_COUNT'] === 'Y';
	$params['SHOW_PRICE_COUNT'] = (int)($params['SHOW_PRICE_COUNT'] ?? 1);
	if ($params['SHOW_PRICE_COUNT'] <= 0)
	{
		$params['SHOW_PRICE_COUNT'] = 1;
	}
	$params['FILL_ITEM_ALL_PRICES'] = isset($params['FILL_ITEM_ALL_PRICES']) && $params['FILL_ITEM_ALL_PRICES'] === 'Y';

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

	$params['ADD_PROPERTIES_TO_BASKET'] = isset($params['ADD_PROPERTIES_TO_BASKET']) && $params['ADD_PROPERTIES_TO_BASKET'] === 'N' ? 'N' : 'Y';
	if (IblockModelPropertyFeature::isEnabledFeatures())
		$params['ADD_PROPERTIES_TO_BASKET'] = 'Y';
	if ($params['ADD_PROPERTIES_TO_BASKET'] === 'N')
	{
		$params['PRODUCT_PROPERTIES'] = array();
		$params['OFFERS_CART_PROPERTIES'] = array();
	}

	$params['PARTIAL_PRODUCT_PROPERTIES'] = isset($params['PARTIAL_PRODUCT_PROPERTIES']) && $params['PARTIAL_PRODUCT_PROPERTIES'] === 'Y' ? 'Y' : 'N';

	$params['OFFERS_SORT_FIELD'] = trim((string)($params['OFFERS_SORT_FIELD'] ?? ''));
	if ($params['OFFERS_SORT_FIELD'] === '')
	{
		$params['OFFERS_SORT_FIELD'] = 'sort';
	}

	$params['OFFERS_SORT_ORDER'] = trim((string)($params['OFFERS_SORT_ORDER'] ?? ''));
	if (
		$params['OFFERS_SORT_ORDER'] === ''
		|| !preg_match(self::SORT_ORDER_MASK, $params['OFFERS_SORT_ORDER'])
	)
	{
		$params['OFFERS_SORT_ORDER'] = 'asc';
	}

	$params['OFFERS_SORT_FIELD2'] = trim((string)($params['OFFERS_SORT_FIELD2'] ?? ''));
	if ($params['OFFERS_SORT_FIELD2'] === '')
	{
		$params['OFFERS_SORT_FIELD2'] = 'id';
	}

	$params['OFFERS_SORT_ORDER2'] = trim((string)($params['OFFERS_SORT_ORDER2'] ?? ''));
	if (
		$params['OFFERS_SORT_ORDER2'] === ''
		|| !preg_match(self::SORT_ORDER_MASK, $params['OFFERS_SORT_ORDER2'])
	)
	{
		$params['OFFERS_SORT_ORDER2'] = 'desc';
	}

	$params['PRICE_VAT_INCLUDE'] = !(isset($params['PRICE_VAT_INCLUDE']) && $params['PRICE_VAT_INCLUDE'] === 'N');

	$params['CONVERT_CURRENCY'] = isset($params['CONVERT_CURRENCY']) && $params['CONVERT_CURRENCY'] === 'Y' ? 'Y' : 'N';
	$params['CURRENCY_ID'] ??= '';
	if (!is_scalar($params['CURRENCY_ID']))
	{
		$params['CURRENCY_ID'] = '';
	}
	$params['CURRENCY_ID'] = trim((string)$params['CURRENCY_ID']);
	if ($params['CURRENCY_ID'] === '' || $params['CONVERT_CURRENCY'] === 'N')
	{
		$params['CONVERT_CURRENCY'] = 'N';
		$params['CURRENCY_ID'] = '';
	}

	$params['OFFERS_LIMIT'] = (int)($params['OFFERS_LIMIT'] ?? 0);
	if ($params['OFFERS_LIMIT'] < 0)
	{
		$params['OFFERS_LIMIT'] = 0;
	}

	$params['CACHE_GROUPS'] = trim((string)($params['CACHE_GROUPS'] ?? ''));
	if ($params['CACHE_GROUPS'] !== 'N')
	{
		$params['CACHE_GROUPS'] = 'Y';
	}

	if (isset($params['~PRICE_CODE']))
	{
		$params['PRICE_CODE'] = $params['~PRICE_CODE'];
	}
	$params['PRICE_CODE'] ??= [];
	if (!is_array($params['PRICE_CODE']))
	{
		$params['PRICE_CODE'] = [];
	}

	$params['SHOW_FROM_SECTION'] = isset($params['SHOW_FROM_SECTION']) && $params['SHOW_FROM_SECTION'] === 'Y' ? 'Y' : 'N';
	if ($params['SHOW_FROM_SECTION'] === 'Y')
	{
		$params['SECTION_ELEMENT_ID'] = (int)($params['SECTION_ELEMENT_ID'] ?? 0);
		$params['SECTION_ELEMENT_CODE'] = trim((string)($params['SECTION_ELEMENT_CODE'] ?? ''));
		$params['DEPTH'] = (int)($params['DEPTH'] ?? 0);

		if (empty($params['SECTION_ID']))
		{
			if ($params['SECTION_CODE'] !== '')
			{
				$sectionId = $this->getSectionIdByCode($params['SECTION_CODE'], $params['IBLOCK_ID']);
			}
			else
			{
				$sectionId = $this->getSectionIdByElement(
					$params['SECTION_ELEMENT_ID'],
					$params['SECTION_ELEMENT_CODE'],
					$params['IBLOCK_ID']
				);
			}

			$params['SECTION_ID'] = $sectionId;
		}
	}

	$params['FILTER_IDS'] ??= [];
	if (!is_array($params['FILTER_IDS']))
	{
		$params['FILTER_IDS'] = [$params['FILTER_IDS']];
	}

	return $params;
}