Задать вопрос
@Aricus

Как установить заголовок на странице детального просмотра элемента католога в 1С-Битрикс?

Есть многостраничный компонент "Каталог". На странице детального просмотра мне нужно произвольно изменить заголовок страницы, добавив к нему дополнительные данные. Выводится заголовок в header.php шаблона сайта так:
<h1 class="landing-block-node-title u-heading-v2__title g-line-height-1_3 g-font-weight-700 g-mb-minus-10 g-color-black g-font-size-32 g-text-transform-none">
	<? $APPLICATION->ShowTitle(); ?>
</h1>

Я поставил проверку установления заголовка типа
$APPLICATION->SetTitle('Проверка 3');
в разные места: header.php и footer.php шаблона сайта, в шаблон компонента. Ничего не работает, хотя в обычных страницах заголовок меняется. Видимо, ещё одна замена происходит где-то после footer. Если в настройках компонента убрать все замены заголовка, он всё равно будет заменён: возьмётся из title страницы.
  • Вопрос задан
  • 783 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Aricus Автор вопроса
Если кому интересно, я справился с задачей так:
В header.php изменил вывод заголовка:
<h1 class="landing-block-node-title u-heading-v2__title g-line-height-1_3 g-font-weight-700 g-mb-minus-10 g-color-black g-font-size-32 g-text-transform-none">
	<? $APPLICATION->ShowViewContent('myPageTitle'); ?>
</h1>

, а в footer.php задавал эту буферизуемую переменную так:
if (mb_strlen($GLOBALS['myPageTitle'])>1) {
	$APPLICATION->AddViewContent('myPageTitle', $GLOBALS['myPageTitle']);
} else {
	$APPLICATION->AddViewContent('myPageTitle', $APPLICATION->GetTitle());
}

Только теперь и в других местах, где компоненты переопределяют заголовок, приходится задавать $GLOBALS['myPageTitle'] в шаблоне. Ну или задать дополнительные условия по путям в footer. Если вы знаете способ получше, напишите.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Не совсем понял, в чём именно проблема. Если проблема в том, что где-то происходит лишний SetTitle, то решаете это так: лезете в ядро, в метод SetTitle и вставляете в его начало что-то вроде:
AddMessage2Log("SetTitle called with {$title}", "main", 20);

И в логе находите виновника.
Если же виновника обойти нельзя, то можно сделать так: на детальной странице элемента делаете:
$APPLICATION->SetPageProperty("my_custom_h1", "Здесь мой заголовок" );

а в init.php обработчик события OnEpilog:
function myHeaderSetter() {
    global $APPLICATION;
    $h1 = trim( $APPLICATION->GetPageProperty('my_custom_h1', '') );
    if ( $h1 !== '' ) {
        $APPLICATION->SetTitle($h1);
    }
}
AddEventHandler("main", "OnEpilog", "myHeaderSetter", 10000 );

Вся сложность - в выборе последнего параметра AddEventHandler(), так как "злодей", возможно, тоже работает через это событие
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы