Оглавление
Проблема
Необходимо автоматически добавить номер из постраничной навигации компонента в title и description текущей страницы, чтобы избежать ошибок дублирования заголовков и описания. Подобные ошибки вы можете видеть в сервисе Yandex.WebmasterРешение
Для этого можно подвесить обработчик на событиеOnEndBufferContent
и переписать контент в буфере вывода перед тем как он будет отдан браузеру. Представленный ниже код необходимо разместить в файле init.php, он расположен или в /bitrix/php_interface/init.php или в /local/php_interface/init.php
//Подписываемся на событие OnEndBufferContent
AddEventHandler("main", "OnEndBufferContent", "addPageNumberToMetaData");
//Функция вставки номера страницы
//Обратите внимание что $content передаётся по ссылке
function addPageNumberToMetaData(&$content)
{
if(isset($_GET['PAGEN_1']))
{
$page = $_GET['PAGEN_1'];
//Правила замены для title
$ptrn = '/(.*?)<title[^>]*>(.*?)\n?\n?<\/title>(.*)/s';
$replace = '$1<title>$2'.' страница - ' . $page . '</title>$3';
$content= preg_replace($ptrn, $replace, $content);
//Правила замены для description
$ptrn = '/(.*?)<meta name="description" content="(.*?)\n?\n?"\s?\/>(.*)/s';
$replace = '$1<meta name="description" content="$2'.' страница - ' . $page . '" />$3';
$content= preg_replace($ptrn, $replace, $content);
}
}
Решение 2
Если компонент списка выводится в рамках комплексного компонента, можно доработать его шаблон используя методыGetPageProperty()
и SetPageProperty()
. Например для комплексного компонента bitrix:news вы можете отредактировать файл news.php комплексного компонента (обычно он лежит в папке /local/templates/ваш_шаблон/components/bitrix/news/news.php) и после вызова компонента bitrix:news.list добавить такой код:
//Уникализируем заголовок страницы
if(is_numeric($_GET['PAGEN_1']) && $_GET['PAGEN_1'] > 0){
$currentPageTitle = $APPLICATION->GetPageProperty('title');
$currentPageDEscription = $APPLICATION->GetPageProperty('description');
$APPLICATION->SetPageProperty('title', $currentPageTitle . ' | страница ' . $_GET['PAGEN_1']);
$APPLICATION->SetPageProperty("description", $currentPageDEscription . ' | страница ' . $_GET['PAGEN_1']);
}
В данном примере мы получаем текущий заголовок раздела, дополняем его номером страницы и переопределяем заголовок до того как страницу видит пользователь.