Добавить номер страницы в Title из пагинации компонента 1С-Битрикс

03.06.2021

Есть несколько вариантов реализации задачи. Для примера рассмотрим два: когда нам надо вставить в конец Titile просто " - страница N" и когда нам надо поставить "страница N из NN".

Отличаются они тем, что во втором случае мы не можем просто использовать GET параметр из адреса страницы.

1) Довольно простой, готовые примеры уже есть в интернете:

// Ставим событие на Эпилог - можно в init.php
AddEventHandler('main', 'OnEpilog', 'OnEpilogHandler');

function OnEpilogHandler() {
    global $APPLICATION;
    // ставим > 1, чтобы для 1 страницы не показывать номер
    if (!empty($_GET['PAGEN_1']) && intval($_GET['PAGEN_1'])>1)
    {
        $title = $APPLICATION->GetPageProperty("title");
        
        if(empty($title))
            $title = $APPLICATION->GetTitle(); // еще вариант
        
        $description = $APPLICATION->GetPageProperty("description");
        
        if(!empty($title))
            $APPLICATION->SetPageProperty('title', $title.' - страница '.$NavPageNomer.' из '.$NavPageCount);
        
        if(!empty($description))
            $APPLICATION->SetPageProperty('description', $description.' - страница '.$NavPageNomer.' из '.$NavPageCount);
    }
}

2) Тут чуть сложнее. Опять же можно сделать по разному, показываю как делал я.

Нам нужно проставить переменные страницы в шаблонах компонент пагинации. Тут сразу важное замечание, шаблон пагинации в данном случае уже будет не дефолтным, а кастомный, т.к. нам нужно внести небольшие правки.

Идем в шаблон компонента system.pagenavigation, если у нас его нет, то создаем копию дефолтного из папки bitrix/components/ , если у вас их несколько - добавляем во все.

Открываем или создаем файл component_epilog.php. Туда добавляем код:

if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

global $APPLICATION;

// мы не хотим показывать для первой страницы в Тайтл номер страницы
if($arResult["NavPageNomer"] > 1) {
    $APPLICATION->SetPageProperty("NavPageNomer", $arResult["NavPageNomer"]);
    $APPLICATION->SetPageProperty("NavPageCount", $arResult["NavPageCount"]);
}

Теперь добавляем событие на Эпилог (можно в файл init.php):

AddEventHandler('main', 'OnEpilog', 'OnEpilogHandler');

function OnEpilogHandler()
{
    global $APPLICATION;
    
    $NavPageNomer = intval($APPLICATION->GetPageProperty("NavPageNomer"));
    $NavPageCount = intval($APPLICATION->GetPageProperty("NavPageCount"));
    // ставим > 1, чтобы для 1 страницы не показывать номер
    if (!empty($NavPageNomer) && intval($NavPageNomer)>1){
        
        $title = $APPLICATION->GetPageProperty("title");
        
        if(empty($title))
            $title = $APPLICATION->GetTitle(); // еще вариант
        
        $description = $APPLICATION->GetPageProperty("description");
        
        if(!empty($title))
            $APPLICATION->SetPageProperty('title', $title.' - страница '.$NavPageNomer.' из '.$NavPageCount);
        
        if(!empty($description))
            $APPLICATION->SetPageProperty('description', $description.' - страница '.$NavPageNomer.' из '.$NavPageCount);
    }
}

ЕДИНСТВЕННОЕ!!! Сразу скажу, что не рассматривался вариант, когда на странице сразу несколько пагинаций. Это частный случай, надо рассматривать индивидуально.

Надеюсь кому-нибудь поможет


Возврат к списку