Если вы хотите чтобы в режиме ЧПУ фильтра, если в url есть лишние/несуществующие/неправильные параметры, то сайт не игнорировал их, а выводил 404 ошибку, то это инструкция для вас.
Дело в том что фильтр не может знать обо всех возможных параметрах, которые могут быть в url, чтобы однозначно определить лишние они или нет. Например в интернет-магазине Битроник сортировка реализована через ЧПУ. У других сайтов могут быть свои особенности. Поэтому фильтр, если встречает неправильные параметры в url он устанавливает константу KOMBOX_FILTER_ERROR_404 = Y. И уже по этой константе вы можете на конкретном сайте принимать решение выводить ошибку 404 или нет, делая если потребуется дополнительные проверки. Начиная с версии 2.5.6 можно получить массив параметров, который фильтр посчитал недействительными. Массив возвращает функция CKomboxFilter::GetUnavailableParams().
Вот пример обычного обработчика без проверок, который в случае если константа KOMBOX_FILTER_ERROR_404 = Y выводит страницу с 404 ошибкой:
<?
AddEventHandler('main', 'OnEpilog', 'Redirect404');
function Redirect404() {
define('PATH_TO_404', '/404.php');
if(
!defined('ADMIN_SECTION') &&
defined('KOMBOX_FILTER_ERROR_404') &&
file_exists($_SERVER['DOCUMENT_ROOT'].PATH_TO_404)
)
{
global $APPLICATION;
$APPLICATION->RestartBuffer();
include($_SERVER['DOCUMENT_ROOT'].SITE_TEMPLATE_PATH.'/header.php');
include($_SERVER['DOCUMENT_ROOT'].PATH_TO_404);
include($_SERVER['DOCUMENT_ROOT'].SITE_TEMPLATE_PATH.'/footer.php');
}
}
?>
И пример с проверкой, в котором мы будем учитывать, что url могут быть параметры сортировки по цене:
<?
AddEventHandler('main', 'OnEpilog', 'Redirect404');
function Redirect404() {
define('PATH_TO_404', '/404.php');
if(
!defined('ADMIN_SECTION') &&
defined('KOMBOX_FILTER_ERROR_404') &&
file_exists($_SERVER['DOCUMENT_ROOT'].PATH_TO_404)
)
{
$params = array();
if(CModule::IncludeModule('kombox.filter')){
$params = CKomboxFilter::GetUnavailableParams(); //недейсвительные параметры
}
//проверка каких-то специальных параметров
if(!empty($params)){
foreach($params as $key => $param){
if(in_array($param, array('sort_price_asc', 'sort_price_desc')))
unset($params[$key]); //удаляем из массива недейсвительных параметров сортировку по цене
}
}
if(!empty($params)){
global $APPLICATION;
$APPLICATION->RestartBuffer();
include($_SERVER['DOCUMENT_ROOT'].SITE_TEMPLATE_PATH.'/header.php');
include($_SERVER['DOCUMENT_ROOT'].PATH_TO_404);
include($_SERVER['DOCUMENT_ROOT'].SITE_TEMPLATE_PATH.'/footer.php');
}
}
}
?>
Данный код следует поместить в файл /bitrix/php_interface/init.php (если на сайте такого файла нет, то его нужно создать).
Включил ЧПУ, теперь при сортировке фильтр сбивается, как исправить? |
Описание курса
| Как убрать промежуточные значения в слайдере?
|