Выпадающее меню Joomla

 

Выпадающее меню Joomla

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

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

Как сделать выпадающее меню joomla?

Прежде всего, необходимо понимать, что меню выводится в позиции для вывода модулей. Следовательно, необходим модуль меню с выпадающим списком. Немного покопавшись в поисковиках на эту тему и опробовав некие варианты, я наткнулся на модуль слайд меню для joomla - «ARI YUI Menu». Этот модуль позволяет создать вертикальное и горизонтальное выпадающее меню, имеет минимум настроек, совместим с joomla 1.5, 2.5. В его основу положена свободно распространяемая библиотека «YUI Library» от команды разработчиков Yahoo.


Создание выпадающего меню на сайте

Прежде всего, необходимо создать саму структуру будущего меню с необходимой иерархией. Это делается так же, как и для стандартного меню. Рассмотрим небольшой пример с живого сайта.

 

На рисунке видно, что основными пунктами меню являются: Трубы, Фитинги, НСПС и Сварочное оборудование - это элементы первого уровня. Пункты Трубы и Фитинги имеют дочерние элементы – элементы второго уровня: Газопроводные трубы, Водопроводные трубы... Пункт меню Канализационные фитинги так же имеет дочерние элементы – элементы третьего уровня.

Как сделать пункт меню дочерним? Да очень просто, при создании пункта меню или в режиме его редактирования указать для него «Родительский элемент». В ниже следующем примере сказано, что пункт меню «Газопроводные трубы» является дочерним по отношению к пункту меню «Трубы». Аналогичным образом строится иерархия для всех остальных пунктов.

Для Joomla 2.5 иерархия строится аналогичным образом, как это делается описано в статье


Установка модуля «ARI YUI Menu»

Скачать модуль «ARI YUI Menu» для joomla можно на сайте автора, там же есть и демонстрационная страница www.demo2.ari-soft.com/ari-yui-menu.html 

Процесс установки стандартный, в административной панели «расширения-установка и удаление», выбираем скаченный файл модуля и нажимаем кнопку «Установить».

После сообщения об успешной инсталляции модуля, необходимо перейти к настройке модуля «Расширения-Модули». Находим в списке модуль «ARI YUI Menu» и нажав на ссылку оказываемся в странице настроек.


Настройка модуля «ARI YUI Menu»

Вкладка «Подробности»

  • смените заголовок
  • проверьте что модуль включен
  • выберите позицию вывода модуля.

Вкладка «Настройки»

  • выберите меню, которое хотите сделать выпадающим
  • введите суффикс класса модуля меню, это пригодится для изменения стиля
  • по вкусу снимите подсветку активного пункта меню
  • выберите тип вертикальное выпадающее меню.
    • Далее отключите модуль стандартного отображения меню, не забыв его переименовать во избежание путаницы, а можете просто удалить совсем.
      • Теперь посмотрим, что у нас получилось.
        • Согласитесь, не совсем красиво, необходимо убирать бордюр, убирать ненужные, уменьшить огромные отступы, увеличить высоту пунктов выпадающего меню. Про вылезающие звездочки голосования вообще молчу. Правим CSS. Обратите внимание на ID модуля, в моем случае id=87 (для Joomla 2.5) и id=23 (для Joomla 1.5).
        • Введите в поле Стиля CSS свои изменения. Обратите внимание, на #ariyui23. Число 23 в данном месте должно соответствовать id модуля. Если нет особой необходимости в указании ID модуля, необходимо использовать предопределенную переменную {$id} вместо #ariyui23, я показал способ по id модуля лишь для наглядности.
          • Мой CSS для модуля ARI YUI Menu, в вашем случае он, скорее всего, будет отличаться.
          • 01.#ariyui23.yui-skin-sam .yuimenu {
          • 02.z-index: 10;
          • 03.}
          • 04.#{$id}.yui-skin-sam .yuimenu .bd {
          • 05.border: 0;
          • 06.}
          • 07.#{$id}.yui-skin-sam .yuimenu li .bd {
          • 08.border: solid 1px #c8c8c8;
          • 09.}
          • 10.#{$id}.yui-skin-sam .yuimenu .yuimenu .bd {
          • 11.*zoom: normal;
          • 12.}
          • 13.#{$id}.yui-skin-sam .yuimenu ul {
          • 14.padding: 0 0 0 0;
          • 15.}
          • 16.#{$id}.yui-skin-sam UL LI A.yuimenuitemlabel {
          • 17.padding: 0 5px !important;
          • 18.}
          • 19. 
          • 20.#{$id}.yui-skin-sam UL LI A.yuimenuitemlabel {
          • 21.height: 25px;
          • 22.line-height: 25px;
          • 23.}
            • Смотрим что получилось, на мой взгляд, именно то, что я хотел. Горизонтальное выпадающее меню я не рассматриваю, вы сможете сделать это самостоятельно.
              • Если вы хотите редактировать непосредственно файл стиля модуля, он располагается тутJOOMLA_ROOT/modules/mod_ariyuimenu/js/assets/menu/sam/safe_menu.css
              • Для управления направлением вылета выпадающих блоков в настройках модуля есть строка "Выравнивание подменю [?]". Описание на страничке разработчика YUI гласит:Массив определения того, как подменю должно быть согласовано с родительским пунктом меню. Формат: [itemCorner, submenuCorner]. По умолчанию левый верхний угол подменю выравнивается в правом верхнем углу родительского пункта меню. Мой комментарий: Считайте что там по умолчанию написано tl,tr. Напишите туда то, что нужно вам.
              • В модуле автор не предусмотрел вывод атрибута title в ссылках пунктов меню и отображение иконок. Покопавшись в исходниках модуля, я добавил такую возможность. Для этого необходимо отредактировать файл JOOMLA_ROOT/modules/mod_ariyuimenu/tmpl/menu.php.
              • Найдите в файле следующую строку:
              • 1.$aAttr = array(
              • 2.'class' => $hrefCssClass . ($isDisabled ? ' ' . $hrefDisabledCssClass : '') . ($isSelected ? ' ' .$hrefSelectedCssClass : '')
              • 3.);
                • Сразу за ней вставьте следующие строки.
                • 01.if (J1_6) {
                • 02.$menuItem->anchor_title = htmlspecialchars($menuItem->params->get('menu-anchor_title', ''), ENT_COMPAT, 'UTF-8', false);
                • 03.$menuItem->anchor_css   = htmlspecialchars($menuItem->params->get('menu-anchor_css', ''), ENT_COMPAT, 'UTF-8', false);
                • 04.$menuItem->menu_image   = $menuItem->params->get('menu_image', '') ? htmlspecialchars($menuItem->params->get('menu_image', ''), ENT_COMPAT, 'UTF-8', false) : '';
                • 05.if ($menuItem->anchor_css)   { $aAttr['class'] .= ' ' . $menuItem->anchor_css; }
                • 06.if ($menuItem->anchor_title) { $aAttr['title'] .=$menuItem->anchor_title; }
                • 07.} else {
                • 08./*$aAttr['title'] .= $menuItem->name; // Раскомментируйте для вывода хинтов*/
                • 09.$iParams = new JParameter($menuItem->params);
                • 10.if ($iParams->get('menu_image') && $iParams->get('menu_image') != -1) {
                • 11.$menuItem->menu_image = JURI::base(true).'/images/stories/'.$iParams->get('menu_image');
                • 12.$menuItem->title = $menuItem->alias;
                • 13.}
                • 14.}
·        

·         Ответы на часто задаваемые вопросы

·         Как добавить атрибуты title в ссылки и иконки пунктов меню?

Далее найдите строку:

1.<a<?php echo AriHtmlHelper::getAttrStr($aAttr); ?>><?php echo stripslashes(htmlspecialchars(J1_6 ? $menuItem->title : $menuItem->name)); ?></a>

Замените ее на:

1.<a<?php echo AriHtmlHelper::getAttrStr($aAttr); ?>>

2.<?php

3.if ($menuItem->menu_image) echo '<img src="'.$menuItem->menu_image.'"' . ($menuItem->title ? ' alt="'.$menuItem->title.'"' : '') . ' />';

4.?>

5.<?php echo stripslashes(htmlspecialchars(J1_6 ? $menuItem->title : $menuItem->name)); ?></a>

 

Загрузить файл с изменениями можно в конце статьи.

В CSS модуля необходимо добавить код для выравнивания текста относительно иконок
#{$id}.yui-skin-sam ul li a img { vertical-align: middle; margin-top: -2px; }

Если высота изображения в px меньше или равна font-size * 1,5, или его нет
#{$id}.yui-skin-sam UL LI.yuimenuitem { min-height: Xpx; padding-top: Ypx; }
X = varint( font-size * 2 - font-size / 4 )
Y = varint( font-size / 4 )

Как поменять курсор меню?

// Горизонтальное меню
#{$id}.yui-skin-sam UL LI A.yuimenubaritemlabel:hover { cursor: pointer; }

// Вертикальное меню
#{$id}.yui-skin-sam UL LI A.yuimenuitemlabel:hover { cursor: pointer; }

Как поменять цвет пункта меню над которым курсор мыши?

// Горизонтальное меню
#{$id}.yui-skin-sam .yuimenubar { background: none; }
#{$id}.yui-skin-sam .yuimenubaritem-selected, #{$id}.yui-skin-sam .yuimenubaritem-active { background: none; }
#{$id}.yui-skin-sam ul li.yuimenubaritem-selected, #{$id}.yui-skin-sam ul li.yuimenubaritem-active { background-color: red; }

// Вертикальное меню
#{$id}.yui-skin-sam ul li.yuimenuitem-selected, #{$id}.yui-skin-sam ul li.yuimenuitem-active { background-color: red; }

Как поменять название и цвет шрифта?

// Горизонтальное меню
#{$id}.yui-skin-sam .yuimenubar ul li a { font-family: Times New Roman; color: blue; }
#{$id}.yui-skin-sam ul li a.yuimenubaritemlabel, #{$id}.yui-skin-sam ul li a.yuimenubaritemlabel:link, #{$id}.yui-skin-sam ul li a.yuimenubaritemlabel:visited, #{$id}.yui-skin-sam ul li a.yuimenubaritemlabel:hover { color: blue; }

// Вертикальное меню
#{$id}.yui-skin-sam .yuimenu ul li a { color: blue; font-family: Times New Roman; }

Как вывести текст пункта меню в несколько строк?

#{$id} .yuimenuitemlabel, #{$id} .yuimenubaritemlabel {white-space: normal;}
#{$id}.yui-skin-sam UL LI.yuimenuitem { min-height: 25px; padding-top: 6px; }
где padding-top = varint( ( min-height - font-size ) / 2 )

"Стрелочка-треугольничек" наезжает на текст, как отодвинуть?

#{$id}.yui-skin-sam li.yuimenuitem-hassubmenu { padding-right: 15px; }
#{$id}.yui-skin-sam ul li a.yuimenuitemlabel { border-bottom: 0px; }
#{$id}.yui-skin-sam li.yuimenuitem { border-bottom: 1px solid #00f; }

Как поменять цвет бордюра?

#{$id}.yui-skin-sam li.yuimenuitem { border-bottom: 1px solid #00f; }
#{$id}.yui-skin-sam .yuimenu li .bd { border: solid 1px #00f; border-bottom: 0; }

Как поменять цвет фона?

._menu { background-color: grey; }
#{$id}.yui-skin-sam .yuimenu .bd { background-color: grey; }


Как направить выпадение пунктов меню влево, а не вправо?

В настройках модуля есть опция «Выравнивание подменю [?]» Если кликнуть по значку-ссылке знаку вопроса - вы попадете на страничку с описанием выравнивания разработчика YUI.

Эта опция представляет собою массив определения того, как подменю должно быть согласовано с родительским пунктом меню.

  • Формат: [itemCorner, submenuCorner]
  • Значения: ["tr","tl"] , ["tl","bl"]

По умолчанию левый верхний угол подменю выравнивается в правом верхнем углу родительского пункта меню.

Комментарий от меня: Считайте что там по умолчанию написано tl,tr (сокращения top, bottom, left, right). Напишите туда то, что нужно вам.


Скачать русифицированный модуль выпадающего меню для joomla

В состав модуля входят переводы на иврит, словацкий, мне захотелось сделать русскую версию модуля, мы же не хуже. Надеюсь, модуль понравится и вам.

Скачать для пользования
Модуль меню ARI Ext Menu – русифицированная версия