Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
то ждем ваше обращение в нашей службе тех поддержки.
При использовании пагинации (в просторечии постранички) на «Битрикс» адреса красотой не блещут. Сначала отображается адрес ЧПУ, а в конце его древний костыль PAGEN_. Разве это дело? Нет, конечно. И вот как исправить положение:
1. Организуем буферизацию вывода system.pagenavigation
Обратите внимание, что для вызова анонимной функции потребуется интерпретатор PHP версии не ниже 5.3.
2. Модифицируем .htaccess
В файл .htaccess надо добавить строчку:
3. Для «Битрикс» версий ниже 15.5 используем обработчик
4. Для «Битрикс» версий 15.5 и высших
Обработчик не используем. Если ранее использовали, то удаляем.
Создаем файл /bitrix/pagen.php с кодом:
И в файл .htaccess добавьте строчку:
Заменив звездочки на ваш док.рут. Обязательно редактируйте файл .htaccess только по FTH/SSH доступам.
Готово!
Назад в раздел
1. Организуем буферизацию вывода system.pagenavigation
Обратите внимание, что для вызова анонимной функции потребуется интерпретатор PHP версии не ниже 5.3.
<? if(!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true)die(); if(!$arResult['NavShowAlways']) { if ($arResult['NavRecordCount'] == 0 || ($arResult['NavPageCount'] == 1 && $arResult['NavShowAll'] == false)) { return; } } $strNavQueryString = ($arResult['NavQueryString'] != '' ? $arResult['NavQueryString'].'&' : ''); $strNavQueryStringFull = ($arResult['NavQueryString'] != '' ? '?'.$arResult['NavQueryString'] : ''); ob_start(); ?> ******** YOUR TPL ******* <?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
В файл .htaccess надо добавить строчку:
RewriteRule ^(.*)/pagen([\d]+)/ /$1/?PAGEN_1=$2 [L,QSA]
3. Для «Битрикс» версий ниже 15.5 используем обработчик
AddEventHandler('main', 'OnPageStart', array('CMainhandlers', 'OnPageStartHandler')); class CMainhandlers { public static function OnPageStartHandler() { $newUri = preg_replace('#(pagen[\d]+/)#is', '', $_SERVER['REQUEST_URI']); if (!CHTTP::isPathTraversalUri($newUri)) { $_SERVER['REQUEST_URI'] = $newUri; $GLOBALS['APPLICATION']->reinitPath(); } } }
4. Для «Битрикс» версий 15.5 и высших
Обработчик не используем. Если ранее использовали, то удаляем.
Создаем файл /bitrix/pagen.php с кодом:
<?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('#(index[\d]+\.html)#is', '', $_SERVER['REQUEST_URI']); if (!__isPathTraversalUri($newUri)) { $_SERVER['REQUEST_URI'] = $newUri; }
И в файл .htaccess добавьте строчку:
php_value auto_prepend_file "***/bitrix/pagen.php"
Заменив звездочки на ваш док.рут. Обязательно редактируйте файл .htaccess только по FTH/SSH доступам.
Готово!
Назад в раздел
Подписаться на новые материалы раздела: