Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Как узнать заголовок текущего пункта меню

00 голосов
7
Здравствуйте!
Мне понадобилось в произвольном месте шаблона страницы вставить заголовок текущего пункта основного меню. Как ни бился, но не могу добраться до этого заголовка. Думаю, что наверняка есть такая возможность.
Заранее благодарен, если сможете подсказать хотя бы в каком направлении копать.
спросил 24 Авг, 13 от DeAtH (120 баллов)

7 Ответы

00 голосов
"Метод в лоб" - включаете в нужное место меню и кастомизируете шаблон.
Что-то типа:
Код
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>

<?if (!empty($arResult)):?>

<?foreach($arResult as $arItem):?>
   <?if($arItem["SELECTED"]):?>
      <?= $arItem['TEXT']?>
   <?endif?>
<?endforeach?>

<?endif?>


Если есть решение более красиво, то с удовольствием тоже посмотрю :)
ответил 24 Авг, 13 от Arn4 (2,140 баллов)
00 голосов
Тоже вариант, конечно, но должно же быть более правильное решение...
Где-то же хранится информация о состоянии страницы (вернее в данном случае выбранного пункта меню), а значит должна быть возможность добраться до нее.
ответил 06 Ноя, 13 от DeAtH (120 баллов)
00 голосов
Цитата
Guest_A пишет:
Тоже вариант, конечно, но должно же быть более правильное решение...

Согласен.
Еще вариант:
Меню - это компонента, а компонента может вернуть результат:
$result = $APPLICATION->IncludeComponent(comp1, ...);

То есть из меню возвращаем выделенный пункт и пользуем его.
Это красивое решение. Если идти дальше, то можно лишь найти более быстрое.
ответил 12 Фев, 14 от Arn4 (2,140 баллов)
00 голосов
Цитата

Еще вариант:
Меню - это компонента, а компонента может вернуть результат:
$result = $APPLICATION->IncludeComponent(comp1, ...);

То есть из меню возвращаем выделенный пункт и пользуем его.
Это красивое решение. Если идти дальше, то можно лишь найти более быстрое.


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

З.Ы. Но вообще, сделал с кастомизацией шаблона в итоге...
Бо устал искать другое решение :)

З.З.Ы. Но если все таки найдется другой вариант решения данного вопроса (чтоб можно было заголовок сохранить в отдельной переменной, а не просто вывести его) - с удовольствием его рассмотрю.
Спасибо!
ответил 02 Июнь, 14 от DeAtH (120 баллов)
00 голосов
В шаблоне меню прописывайте активный пункт в параметры страницы
$APPLICATION->SetPageProperty("active_menu_item", $arItem['TEXT']);

А в шаблоне страницы просто выводите это свойство
<?=$APPLICATION->GetPageProperty("active_menu_item");?>

Если же меню вызывается после контента, то воспользуйтесь отложенными функциями
ответил 30 Сен, 14 от Yahooo (140 баллов)
00 голосов
Цитата
Александр пишет:
В шаблоне меню прописывайте активный пункт в параметры страницы
$APPLICATION->SetPageProperty("active_menu_item", $arItem['TEXT']);

А в шаблоне страницы просто выводите это свойство
<?=$APPLICATION->GetPageProperty("active_menu_item­");?>

Если же меню вызывается после контента, то воспользуйтесь отложенными функциями


Еще не пробовал, почему-то думал, что параметры страницы нельзя задавать из шаблонов компонент, но судя по всему это именно то, что нужно :)
Спасибо!
ответил 02 Фев, 15 от DeAtH (120 баллов)
00 голосов
Цитата
Guest_A пишет:
почему-то думал, что параметры страницы нельзя задавать из шаблонов компонент


Это верно только в случае, если вы не будете включать кеширование. Как только включите - приведенный выше код работать перестанет. Выход - кастомизация всей компоненты целиком и внесение этих правок в некешируемую область кода компоненты (не шаблона) .
ответил 16 Май, 15 от Sage (460 баллов)

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

0 голосов
1 ответ
спросил 14 Авг, 13 от sanokruss (160 баллов)
0 голосов
5 ответов
0 голосов
3 ответов
спросил 20 Март, 14 от pop72 (240 баллов)
0 голосов
3 ответов
спросил 04 Март, 14 от Amilan (260 баллов)
0 голосов
1 ответ