Добавить в корзинуПозвонить
Найти в Дзене
Программист - турист

Битрикс. Изменить адрес пагинации PAGEN_

СЕО специалисты часто просят в постраничной навигации сайта не использовать get параметры. В 1C-Bitrix из коробки именно через них реализована пагинация и штатной возможности включить ЧПУ для пагинации не предусмотрено. Антон Долганин, гуру Bitrix, предложил очень просто вариант реализации красивой навигации без get параметров PAGEN_ еще в 2013 году, в 2015 обновил его, т.к. старое решение перестало работать с bitrix версии 15.5, оригинал стать тут. Задача: Привести ссылки навигации по страницам раздела сайта на bitrix к виду: /путь_до_страницы/page-2/ Решение задачи в трех шагах: Шаг 1 — обновляем шаблон пагинации bitrix В шаблоне компонента system.pagenavigation, нужно включить буферезацию вывода, для этого перед HTML вставить вызов функции: ob_start(); и после HTML, в конец файла шаблона,  вставить php-скрипт для преобразования ссылок пагинации в ЧПУ: <?php
$paging = ob_get_contents();
$paging = preg_replace_callback('/href="([^"]+)"/is', function($matches) {
$url = $matches[1]

СЕО специалисты часто просят в постраничной навигации сайта не использовать get параметры. В 1C-Bitrix из коробки именно через них реализована пагинация и штатной возможности включить ЧПУ для пагинации не предусмотрено.

Антон Долганин, гуру Bitrix, предложил очень просто вариант реализации красивой навигации без get параметров PAGEN_ еще в 2013 году, в 2015 обновил его, т.к. старое решение перестало работать с bitrix версии 15.5, оригинал стать тут.

Задача:

Привести ссылки навигации по страницам раздела сайта на bitrix к виду:

/путь_до_страницы/page-2/

Решение задачи в трех шагах:

Шаг 1 — обновляем шаблон пагинации bitrix

В шаблоне компонента system.pagenavigation, нужно включить буферезацию вывода, для этого перед HTML вставить вызов функции:

ob_start();

и после HTML, в конец файла шаблона,  вставить php-скрипт для преобразования ссылок пагинации в ЧПУ:

<?php
$paging = ob_get_contents();
$paging = preg_replace_callback('/href="([^"]+)"/is',
function($matches) {
$url = $matches[1];
$newUrl = '';
if ($arUrl = parse_url($url)) {
$newUrl =
isset($_SERVER['REAL_FILE_PATH'])&&strlen($_SERVER['REAL_FILE_PATH']) ? $_SERVER['REAL_FILE_PATH'] : $_SERVER['SCRIPT_NAME'];
$newUrl = str_replace(
array('index.php', 'index.html'), '', $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 .= 'page-'.intval($v).'/';
unset($arQuery[$k]);
}
}
$buildQuery = http_build_query($arQuery, '', '&');
if (strlen($buildQuery)) {
$newUrl .= '?'.$buildQuery;
}
}
return 'href="'.$newUrl.'"';
}, $paging);
ob_end_clean();
echo $paging;
Примечание: HTML менять не нужно, скрипт сам заменить все ссылки на необходимые.

Шаг 2 — Создать файл и поместить в него  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('#(page-[\d]+/)#is', '', $_SERVER['REQUEST_URI']);
if (!__isPathTraversalUri($newUri)) {
$_SERVER['REQUEST_URI'] = $newUri;
}

Шаг 3 — Подключить обработчик ЧПУ пагинации в bitrix

Чтобы скрипт обработки URL срабатывал до выполнения php кода сайта надо указать в параметре auto_prepend_file настроек php путь к файлу из шага 2.

На большинстве хостингов этот параметр можно установить в .htaccess:

  • php_value auto_prepend_file "путь_до_document_root/include/pagen.php"

Посмотреть свой путь до document rootочень просто, создайте и запустите php файл с кодом:

<?php
echo $_SERVER["DOCUMENT_ROOT"];

Вот так за 3 простых шага решается задача создания ЧПУ пагинации на bitrix.