Здравствуйте, появилась у меня следующая задача: "Сделать ЧПУ пагинацию на Битрикс". Как я понял в Битриксе, нет такого стандартного функционала? (если есть укажите на него пожалуйста).Чтобы допустим 2 страница списка статей выглядела не так: "/sections/blog/?PAGEN_1=2", а так "/sections/blog/pagen2/".
По данному вопросу нашел 1 решение, которое было скопировано на всех сайтах (а именно вот это [URL=https://dev.1c-bitrix.ru/community/webdev/user/11948/blog/7428/]https://dev.1c-bitrix.ru/community/webdev/user/11948/blog/7428/[/URL]). Я воспользовался этим решением:
1. В шаблоне компонента system.pagenavigation включил буферезацию ob_start() до html, после html:
<?php
$paging = ob_get_contents();
$paging = preg_replace_callback('/href="([^"]+)"/is', function($matches){
$url = $matches[1];
$newUrl = '';
if ($arUrl = parse_url($url)){
$newUrl .= $arUrl['path'];
if (substr($newUrl, -1) != '/'){
$newUrl .= '/';
}
$newUrl = preg_replace('#(pagen[\d]+/)#is', '', $newUrl);
parse_str(htmlspecialcharsback($arUrl['query']), $arQuery);
foreach ($arQuery as $k => $v){
if (in_array($k, array('SECTION_CODE'))){
unset($arQuery[$k]);
} elseif (substr($k, 0, 5)=='PAGEN'){
$newUrl .= 'pagen'.intval($v).'/';
unset($arQuery[$k]);
}
}
$buildQuery = http_build_query($arQuery, '', '&');
if (strlen($buildQuery)){
$newUrl .= '?'.$buildQuery;
}
}
return 'href="'.$newUrl.'"';
}, $paging);
ob_end_clean();
echo $paging;
?>
2. В .htaccess добавил следующее правило: RewriteRule ^(.*)/pagen([\d]+)/ /$1/?PAGEN_1=$2 [L,QSA]
3. Создал файл (/bitrix/pagen.php) и поместил в него скрипт обработки URL:
<?php
function __isPathTraversalUri($uri){
if (($pos = strpos($uri, '?')) !== false){
$uri = substr($uri, 0, $pos);
}
$uri = trim($uri);
return preg_match("#(?:/|2f|^|\\\\|5c)(?:(?:%0*(25)*2e)|\\.){2,}(?:/|%0*(25)*2f|\\\\|%0*(25)*5c|$)#i", $uri) ? true : false;
}
$newUri = preg_replace('#(pagen[\d]+/)#is', '', $_SERVER['REQUEST_URI']);
if (!__isPathTraversalUri($newUri)){
$_SERVER['REQUEST_URI'] = $newUri;
}
?>
4. В /etc/php/7.0/apache2/php.ini добавил: auto_prepend_file = /var/www/html/bitrix/pagen.php - чтобы скрипт отрабатывал перед подключением остальных.
В urlrewrite.php такие правила для раздела где должна быть пагинация:
$arUrlRewrite = array(
array(
"CONDITION" => "#^/sections/blog/#",
"RULE" => "",
"ID" => "bitrix:news",
"PATH" => "/sections/blog/index.php",
)
);
Все сделал, но возникает ошибка: перехожу в раздел "Блог" со списком статей, на странице отображается постраничная навигация, уже с нужными мне ссылками вида "/sections/blog/pagen2/" - для второй странице.
Нажимаю на нее, идет перезагрузка станицы, но после нее ничего не происходит, список статей остается такой же, как и был (от первой страницы), в навигации, тоже указана что выбрана первая страница.
Еще немного данных: использую БУС 17.0.9.
Нашел людей на форумах с такой же проблемой как у меня, но им ответа тоже ни кто не дал, как ее решить?
Так что я прошу у Вас помощи, может есть какое то другое решение данной задачи или же, можно как то это подправить?