Как вывести разные названия раздела в меню и в заголовке в 1С Битрикс?

В 1С Битрикс есть несколько способов вывода разных названий раздела в меню и в заголовке. Рассмотрим два основных подхода.

1. Использование пользовательских полей.

В 1С Битрикс есть возможность добавления пользовательских полей к разделам. Создадим пользовательское поле с названием "Название для меню" для разделов. Затем пропишем для каждого раздела нужное значение этого поля.

Чтобы вывести это название в меню, откроем файл меню и добавим следующий код в нужное место:

<?
$APPLICATION->IncludeComponent(
    'bitrix:menu',
    'top_menu',
    array(
        // другие параметры меню

        'ON_MENU_SHOW_SECTION' => 'Y',
        'ON_MENU_SHOW_SECTION_FIELD' => 'UF_MENU_TITLE',
        'ON_MENU_SHOW_SECTION_IBLOCK_ID' => 1
    )
);
?>

В этом коде 'ON_MENU_SHOW_SECTION' => 'Y' указывает, что нужно выводить названия разделов в меню, 'ON_MENU_SHOW_SECTION_FIELD' => 'UF_MENU_TITLE' указывает, что в качестве названия нужно использовать значение пользовательского поля UF_MENU_TITLE, а 'ON_MENU_SHOW_SECTION_IBLOCK_ID' => 1 говорит, что работаем с элементами информационного блока с ID равным 1.

Аналогично, чтобы вывести название раздела в заголовке страницы, откроем файл шаблона страницы и добавим код:

<?
$APPLICATION->SetTitle($APPLICATION->GetDirProperty('title'));
?>

Затем пропишем в пользовательском поле UF_PAGE_TITLE нужное название для каждого раздела. Выведем это название в заголовке страницы, добавив следующий код в файл шаблона страницы:

<?
$APPLICATION->SetTitle($APPLICATION->GetDirProperty('page_title'));
?>

Или вместо этого можно использовать:

<?
$APPLICATION->SetTitle($APPLICATION->GetTitle());
?>

После этих настроек каждый раздел будет иметь свое название в меню и в заголовке.

2. Использование свойств элемента информационного блока.

Второй способ - использование свойств элемента информационного блока. Для этого откроем карточку редактирования элемента инфоблока, добавим нужные свойства (например, "Название для меню" и "Название для заголовка") и пропишем нужные значения для каждого элемента.

Затем, чтобы выводить название раздела в меню, добавим следующий код в шаблоне меню:

<?php
$sectionName = '';
if (CSite::InDir('/section/')) {
    $sectionId = substr($_SERVER['REQUEST_URI'], strrpos($_SERVER['REQUEST_URI'], '/') + 1);
    $sectionName = CIBlockSection::GetByID($sectionId)->GetNext()['NAME'];
}
?>

Используем $sectionId для получения названия текущего раздела информационного блока, а затем выводим это название в нужном месте меню:

<a href="/section/<?=$sectionId;?>"> <?=$sectionName;?> </a>

Аналогичным образом можно использовать свойство элемента для вывода названия раздела в заголовке страницы, добавив следующий код в файл шаблона страницы:

<?php
$elementId = $APPLICATION->GetCurPageParam();
$elementName = CIBlockElement::GetByID($elementId)->GetNext()['NAME'];
$APPLICATION->SetTitle($elementName);
?>

Таким образом, используя пользовательские поля или свойства элемента информационного блока, можно выводить разные названия раздела в меню и в заголовке страницы в 1С Битрикс.