Пришлось вот так накостылить с подсчетом количества косых черт, чтобы по урлу проверить, сколько свойств задавалось, сколько свойств фактически задано. Это актуально, когда у товара какие-то свойства удаляют, а страница продолжает открываться.
Код |
---|
$page = $APPLICATION->GetCurPage(false); if ( strpos($page, "/filter/") !== false ) { // вырежем кусок с примененными фильтрами из урла $filter_path = ''; if (preg_match('/filter\/(.*?)\/apply\//', $page, $match) == 1) { $filter_path = $match[1]; } //возьмем оригинальный урл фильтра, уберем из него часть с фильтром, чтобы осталась только ссылка на последний раздел $base_page = $arResult['ORIGINAL_PARAMETERS']['CURRENT_BASE_PAGE']; $cleared_base_page = preg_replace('/filter.*/', '', $base_page); // проверим, есть ли значения фильтра $filter_props = $arResult['ORIGINAL_PARAMETERS']['GLOBAL_FILTER']; if (empty($filter_props)) { // если свойства в фильтре не выбраны, значит, в урле фильтра что-то не то, делаем редирект на страницу раздела $redirectResponse = \Bitrix\Main\Application::getInstance()->getContext()->getResponse() ->redirectTo($cleared_base_page) ->setStatus('301 Moved Permanently'); \Bitrix\Main\Application::getInstance()->end(0, $redirectResponse); } else { // свойства в фильтре выбраны, проверим, совпадает ли их количество с тем, что задано в урле $url_props_count = substr_count($filter_path, '/') + 1; // в урле считаем количество косых черт, поэтом свойств на 1 больше, чем количество черт if (count($filter_props) !== $url_props_count) { $redirectResponse = \Bitrix\Main\Application::getInstance()->getContext()->getResponse() ->redirectTo($cleared_base_page) ->setStatus('301 Moved Permanently'); \Bitrix\Main\Application::getInstance()->end(0, $redirectResponse); } } } |