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