Иногда требуется использовать фильтрацию элементов по каким-либо свойствам внутри комплексного компонента (например, bitrix:news). Предположим, что нужно при загрузке страницы показывать элементы инфоблока, привязанные к идентификатору города, который хранится в массиве $_SESSION
. Причем это нужно дедать не используя компонент bitrix:catalog.filter, который встроен в комплексный компонент bitrix:news. Казалось бы, что ничего сложного нет, создаем массив и передаем его в качестве фильтра ($arParams["FILTER_NAME"]
) в вызов bitrix:news.list.
PHP
/*файл news.php комплексного компонента*/
$arPropFilter = Array(
"PROPERTY_CITYPROP" => $_SESSION["CITY_ID"],
);
$APPLICATION->IncludeComponent(
"bitrix:news.list",
"",
Array(
…
"FILTER_NAME" => "arPropFilter",
…
),
$component
);
Приведенный выше код в комплексном компоненте корректно работать не будет!
Чтобы все работало правильно, нужно поместить массив с условиями фильтрации в глобальную область видимости (массив $GLOBALS
). В итоге корректный код будет выглядеть следующим образом.
PHP
/*файл news.php комплексного компонента*/
$GLOBALS["arPropFilter"] = Array(
"PROPERTY_CITYPROP" => $_SESSION["CITY_ID"],
);
$APPLICATION->IncludeComponent(
"bitrix:news.list",
"",
Array(
…
"FILTER_NAME" => "arPropFilter",
…
),
$component
);
Однако, хочу обратить ваше внимание: если вызвать простой компонент bitrix:news.list на странице сайта с фильтром, то даже без размещения его в $GLOBALS
все будет работать без проблем.