<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
$arResult['NAV_NUM'] = $arResult['NAV_RESULT']->NavNum;
$arResult['NAV_PAGE_NOMER'] = $arResult['NAV_RESULT']->NavPageNomer;
$arResult['NAV_PAGE_COUNT'] = $arResult['NAV_RESULT']->NavPageCount;
$arResult['SECTION_CODE'] = $arParams['SECTION_CODE'];
$this->__component->SetResultCacheKeys([
'NAV_NUM',
'NAV_PAGE_NOMER',
'NAV_PAGE_COUNT',
]);
<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
// Передаём данные пагинации в глобальную переменную для init.php
$GLOBALS['NEWS_PAGINATION'] = [
'cur' => (int)$arResult['NAV_PAGE_NOMER'],
'last' => (int)$arResult['NAV_PAGE_COUNT'],
];
// добавление prev next при постраничной навигации
AddEventHandler('main', 'OnEndBufferContent', 'updatePaginationPrevNext');
function updatePaginationPrevNext(&$content)
{
if (!is_string($content)) return;
$baseUrl = $_SERVER['REQUEST_URI'];
// Чистим служебные параметры
$baseUrl = preg_replace('/([?&])PAGEN_\\d+=\\d+(&|$)/i', '$1', $baseUrl);
$baseUrl = preg_replace('/([?&])clear_cache=[^&]*(&|$)/i', '$1', $baseUrl);
$baseUrl = preg_replace('/([?&])sessid=[^&]*(&|$)/i', '$1', $baseUrl);
$baseUrl = rtrim($baseUrl, '?&');
$scheme = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') ? 'https' : 'http';
$host = $scheme . '://' . strtok($_SERVER['HTTP_HOST'], ':');
$glue = strpos($baseUrl, '?') !== false ? '&' : '?';
$inject = '';
// prev / next из данных компонента
if (!empty($GLOBALS['NEWS_PAGINATION'])) {
$curPage = $GLOBALS['NEWS_PAGINATION']['cur'];
$lastPage = $GLOBALS['NEWS_PAGINATION']['last'];
if ($curPage < $lastPage) {
$inject .= '<link rel="next" href="' . $host . $baseUrl . $glue . 'PAGEN_1=' . ($curPage + 1) . '">' . "\n";
}
if ($curPage > 1) {
$urlPrev = ($curPage - 1) > 1
? $host . $baseUrl . $glue . 'PAGEN_1=' . ($curPage - 1)
: $host . $baseUrl;
$inject .= '<link rel="prev" href="' . $urlPrev . '">' . "\n";
}
}
// Удаляем старый canonical
$content = preg_replace('#<link[^>]+rel=["\']canonical["\'][^>]*>\s*#is', '', $content);
// Вставляем перед </head>
$content = str_replace('</head>', $inject . '</head>', $content);
// Title / Description / H1 / Keywords с номером страницы
$pageNum = 0;
foreach ($_GET as $key => $val) {
if (preg_match('/^PAGEN_\\d+$/i', $key)) {
$pageNum = (int)$val;
break;
}
}
if ($pageNum > 1) {
$suffix = ' — страница ' . $pageNum;
// Title
$content = preg_replace(
'#(<title>)(.*?)(</title>)#is',
'$1$2' . htmlspecialchars($suffix) . '$3',
$content
);
// Description
$content = preg_replace(
'#(name=["\']description["\'][^>]*content=["\'])([^"\']*?)(["\'])#is',
'$1$2' . htmlspecialchars($suffix) . '$3',
$content
);
// Keywords
$content = preg_replace(
'#(name=["\']keywords["\'][^>]*content=["\'])([^"\']*?)(["\'])#is',
'$1$2' . htmlspecialchars($suffix) . '$3',
$content
);
// H1 — только первый на странице
$content = preg_replace(
'#(<h1[^>]*>)(.*?)(</h1>)#is',
'$1$2' . htmlspecialchars($suffix) . '$3',
$content,
1
);
}
}
// добавление prev next при постраничной навигации
<title>Новости — страница 4</title>
<description>Новости — страница 4</description>
<h1>Новости — страница 4</h1>
<link rel="canonical" href="https://site.ru/company/news/">
<link rel="next" href="https://site.ru/company/news/?PAGEN_1=5">
<link rel="prev" href="https://site.ru/company/news/?PAGEN_1=3">
Для улучшения работы сайта и его взаимодействия с пользователями мы используем файлы cookie. Продолжая работу с сайтом, Вы разрешаете использование cookie-файлов. Вы всегда можете отключить файлы cookie в настройках Вашего браузера.