Дата последнего изменения: 02.11.2023
Подсветка ссылок
Поле Доп.ссылки для подсветки в расширенной форме редактирования меню позволяет включать подсветку определенных пунктов при переходе на страницу. Это бывает нужно в случаях, когда пользователь не должен забывать, откуда он пришел, либо для обращения внимания на определенную страницу.
При посещении страницы, указанной в поле Доп.ссылки для подсветки, будет происходить подсветка настраиваемого пункта меню. Путь к страницам задается относительно корня сайта.
Как сделать, чтобы отдельный пункт меню открывался в новом окне?
Для этого нужно в расширенном режиме редактирования прописать у нужных пунктов следующие дополнительные параметры:
Название: target Значение: target="_blank"
В шаблоне меню, после вывода элемента меню, необходимо заменить код:
<a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a>
на следующий:
<a href="<?=$arItem["LINK"]?>" <?=$arItem["PARAMS"]["target"]?>><?=$arItem["TEXT"]?></a>
Отображение пункта меню для определенных групп пользователей
В расширенном режиме редактирования меню для желаемого пункта необходимо выбрать тип условия равный Для групп пользователей, а в самом условии отметить группы, которые этот пункт будут видеть.
Тип условия: Для групп пользователей Условие: требуемые_группы_пользователей
Отображение пункта меню неавторизованным пользователям
В расширенном режиме редактирования меню необходимо установить следующее условие:
Тип условия: выражение PHP Условие: !$USER->IsAuthorized()
Отображение пункта меню при нахождении в определенном разделе сайта
Система позволяет отображать пункт меню только при нахождении в указанном разделе сайта или на его страницах. Для этого в расширенном режиме редактирования меню в поле Тип условия необходимо выбрать опцию Для папки и файла, а в поле Условие указать путь.
Отображение определенных пунктов только на главной странице и еще в одном внутреннем разделе
В расширенном режиме в поле условие для нужных пунктов ввести выражение php:
CSite::InDir('/about/') or CSite::InDir('/index.php')
Осуществление вывода пункта меню, ссылающегося на определенный товар, связанный с товаром, открытым на данной странице
Для этого можно использовать тип условия Параметр в URL. Пункт будет отображен на страницах с определенным параметром в URL. Параметр работает с URL, в которых есть символ ?
. То есть, с динамическими страницами.
Страницы, созданные на базе инфоблоков, имеют URL вида: http://сайт/раздел/index.php?SECTION_ID=***. Предположим, что на странице с SECTION_ID=123 должен быть отражен пункт меню, ведущий на страницу SECTION_ID=456.
Создадим пункт меню, ведущий на страницу http://сайт/раздел/index.php?SECTION_ID=456. В поле Тип условия выберем Параметр в URL, в первом поле Условие укажем SECTION_ID
, а во втором 123
.
Всплывающие подсказки для пунктов меню
Для этого необходимо в расширенном режиме редактирования добавить дополнительный параметр A_TITLE
, и записать в него содержание всплывающей подсказки.
Название: A_TITLE Значение: текст_всплывающей_подсказки
В шаблоне меню:
<?if($arItem["SELECTED"]):?> <li><a href="<?=$arItem["LINK"]?>" class="selected"><?=$arItem["TEXT"]?></a></li> <?else:?> <li><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></li> <?endif?>нужно заменить первую ссылку в коде на строку:
<a href="<?=$arItem["LINK"]?>" class="selected" title="<?=$arItem["PARAMS"]["A_TITLE"]?>"><?=$arItem["TEXT"]?></a>а вторую на:
<a href="<?=$arItem["LINK"]?>" title="<?=$arItem["PARAMS"]["A_TITLE"]?>"><?=$arItem["TEXT"]?></a>
Как поставить картинки рядом с пунктами меню?
Для этого необходимо добавить в меню дополнительный параметр (редактирование меню в расширенном режиме), например IMG
, и записать в него адрес изображения, которое хотите вывести рядом с данным пунктом.
Название: IMG Значение: путь_к_картинке
В шаблон меню, после вывода элемента меню, необходимо после строки (в зависимости от шаблона):
<a href="<?=$arItem["LINK"]?>">
добавить следующее:
<img src="<?=$arItem["PARAMS"]["IMG"]?>" border="0" />
Разные картинки-пункты меню для разных языков
Меню состоит из пунктов-картинок, заданных CSS классами. Сайт двуязычный. Сама структура меню уже разделена и подключена, необходимо разделить оформление.
Решение:
Укажите в шаблоне меню следующее:<body class="lang-<?=LANG?>">в CSS:
.menu li.item1 { background-image:url(title-en.gif); } .lang-ru .menu li.item1 { background-image:url(title-ru.gif); }
Отображение собственного, не такого как в шаблоне, меню для определенных разделов сайта
Организовать такое меню можно с помощью смены шаблона сайта (Настройки > Настройки продукта > Сайты > Список сайтов, редактирование сайта, секция Шаблон, условие для папки или файла). Причем, если шаблон не сложный, то можно прямо в коде шаблона поставить проверку и в одном случае выводить одно меню в другом - другое:if($APPLICATION->GetCurPage() == "/index.php") { вывод меню для главной страницы } else { вывод второго меню }
Как сделать меню tree в постоянно открытом состоянии?
Решение:
Нужно взять стандартный шаблон меню tree, скопировать его в свой шаблон. После чего в файле template.php необходимо строчку:<li class="close">заменить на:
<li>
При этом развернутые пункты будут прятаться по щелчку на изображении.
Как сделать так, чтобы при открытии страницы через древовидное меню, само меню не сворачивалось, а показывало, на какой странице ты находишься?
Решение:
Нужно взять стандартный шаблон меню tree, скопировать его в свой шаблон. После чего в файле template.php необходимо 14 строчку:<li class="close">заменить на:
<li <?if (!$arItem["SELECTED"]):?>class="close"<?endif?>>
Следующий код, который необходимо вставить в файл шаблона, позволяет меню не сворачиваться, при уровне вложенности больше 2:
... <?if (!empty($arResult)):?> <? //анализ открытых узлов дерева $lastLevel = 0; $selected = false; foreach(array_reverse($arResult) as $arItem){ if ($arItem["SELECTED"]) { $lastLevel = $arItem["DEPTH_LEVEL"]; $selected = true; } if ($selected and $arItem["DEPTH_LEVEL"] < $lastLevel){ $arResult[ $arItem["ITEM_INDEX"] ]["SELECTED"] = true; $lastLevel--; } } ?> <div class="menu-sitemap-tree"> <ul> <?$previousLevel = 0;foreach($arResult as $arItem):?> ...
Скрытие бокового меню по свойству страницы
Задача такая. В шаблоне сайта прописан вывод бокового меню. Нужно, чтобы оно не показывалось только на тех страницах, у которых прописано какое-нибудь свойство, отменяющее показ бокового меню.
Решение:
Если меню расположено в header'е, то функцию GetProperty использовать нельзя, потому что свойства страницы задаются после подключения header'a. Поэтому меню можно вывести "отложенно" следующим способом:
$APPLICATION->ShowProperty('menu');
$APPLICATION->SetPageProperty('hide_menu', 'Y');
if( 'Y' != $APPLICATION->GetPageProperty('hide_menu') ){ ob_start(); echo 'проверка отложенного меню!'; // ....здесь происходит вывод меню компонентом или другим способом.... // $APPLICATION->SetPageProperty('menu', ob_get_clean() ); }
Само меню "выводится" в футере, если свойство hide_menu
не установлено в значение Y. Но оно не выводится на самом деле в футере, а отправляется в свойство menu
, которое "выше" по коду можно показать "отложенно" через ShowProperty
. Если меню запрещено, то в значении свойства menu
будет пусто и ничего не покажется в шаблоне. Если не запрещено, то для этого примера - там, где прописано $APPLICATION->ShowProperty('menu')
, будет выведена фраза проверка отложенного меню!
.
Меню и кеш
bitrix/managed_cache/MYSQL/menu
весит 16Гб! На сайте присутствуют 2 меню горизонтальное - навигация по страницам сайта и вертикальное - по разделам каталога. Кеш меню зависит от адреса страницы. Если страниц много, то кеш может получаться большим. В этом случае может оказаться более эффективным отключить кеш в компоненте меню.