Проблема

Необходимо автоматически добавить номер из постраничной навигации компонента в 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']);
}

В данном примере мы получаем текущий заголовок раздела, дополняем его номером страницы и переопределяем заголовок до того как страницу видит пользователь.

Другие решения
Скачать изображение средствами CURL PHP

Скачать изображение средствами CURL PHP

Как загрузить файл изображения по имеющейся в распоряжении ссылке (URL), при этом проверить его на допустимое разрешение (размер) и вес и mime-тип.

Публикация записей с сайта в Telegram-канал

Публикация записей с сайта в Telegram-канал

Как автоматически публиковать посты в телеграм канал

Вывод блока недавно просмотренных товаров 1С Битрикс

Вывод блока недавно просмотренных товаров 1С Битрикс

Как вывести недавно просмотренные товары в произвольном месте сайта


Комментарии
Защита от автоматических сообщений
CAPTCHA
Введите слово на картинке