Пришлось вот так накостылить с подсчетом количества косых черт, чтобы по урлу проверить, сколько свойств задавалось, сколько свойств фактически задано. Это актуально, когда у товара какие-то свойства удаляют, а страница продолжает открываться.
| Код |
|---|
$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);
}
}
}
|





