1) Создание меню.
В панели администратора заходим в менеджер модулей ( Расширения => модули ), над списком модулей находим кнопку «Новый» ( Крестик ). На открывшейся странице находим пункт «Меню», жмем на него. Слева в верхней строчке пишем название модуля, оно же будет заголовком, выводящимся на странице. Варианты включить и выключить для отображения заголовка ( показать или скрыть его на странице сайта ), включить или отключить модуль. Выбыраем из списка позицию шаблона, в которой будет выведено меню (например «top» или «left»). Ниже: выбор группы пользователей, для которых показывать меню, дополнительные стили для меню.
Справа видим выпадающий список со всеми меню, выбираем по названию созданное нами ранее. Ниже предоставляются варианты отображения, выбираем «Список». Можете поэкспериментировать с остальными вариантами. Разница в способах представления на уровне HTML разметки. Но чаще используется именно Список.Далее идут пункты «Начальный уровень» и «Последний уровень», «Всегда показывать подпункты» — это настройки уровней вложенности для пунктов меню, о них информация ниже. Расположение нового окна — параметры JavaScript — расположение всплывающего окна, например,
top=50,left=50,width=200,height=300
В дополнительных параметрах возможно указать интервал между пунктами горизонтального меню (показывать или нет), кэширование ( рекомендуется когда меню уже создано и отредактировано — кэширование позволяет оптимизировать работу сайта ). Ниже располагаются настройки:
Через них возможно привязывать к меню собственные CSS стили. Например указав для суффикса класса меню
Код:
_main
. В коде нашего меню увидим
Код:
<ul class="menu_main">
Вместо
Код:
<ul class="menu">
Максимальный уровень вложенности меню по умолчанию стоит 10. То есть меню может содержать максимум 10 уровней вложенных подменю. Уровни больше этого числа будут игнорироваться. Если не показываются подпункты некоторого уровня, то увеличьте это число. В других настройках возможно настроить:
Жмем «Сохранить». На странице сайта появляется соданное нами меню. Таким образом мы создали простое меню, без всяких эффектов.
2) Расширяем меню.
Расширить свойства меню можно путем CSS, JavaScript и PHP. Существует множество готовых решений, но редко они соответсвуют требованиям конкретного сайта без необходимости их «допиливать». Эти решения мы не будем разбирать в данной теме, а разложим варианты, наиболее часто задаваемых вопросов в разделе.
Простое горизонтальное меню.
ul.menu {
padding:<span>0</span>;
margin:<span>0</span>;
}
ul.menu li {
float: left; /* выравниваем ссылки по горизонтали */
list-style-type: none; /* убираем маркеры списка*/
padding-left:<span>10px</span>; /* внутренний отступ слева */
padding-right:<span>10px</span>; /* внутренний отступ справа */
padding-bottom:<span>0px</span>; /* внутренний отступ снизу */
padding-top:<span>0px</span>; /* внутренний отступ сверху */
background-image: url(../images/menu_sep<span>.gif</span>) no-repeat right top; /* разделитель */
position:relative; /* позиционируем в блоке родителя */
}
ul.menu a {
display: block; /* делаем кликабельной всю кнопку */
height: 22px; /* высота кнопки*/
padding: 0 10px; /* внутренний отступ справа и слева */
overflow: hidden; /* запрещаем обтекание */
color: #7a7a7a; /* цвет ссылки */
font-family:Grotic; /* название шрифта */
font-style:bold; /* жирность шрифта */
font-size: 11px; /* размер шрифта */
text-decoration:none; /* убираем подчеркивание ссылки */
padding-top:<span>3px</span>; /* внутренний отступ сверху */
}
ul.menu li.active a, ul.menu li a:hover {
color:#E8A03D; /* цвет ссылки при наведении и активной ссылки */
}
Так же можно вместо разделителя задать цвет кнопки, или присвоить ей графику.
Аналогично
background-image: url(../images/menu_sep.gif) no-repeat right top;
возможно присвоить к
ul.menu a
и
ul.menu li.active a, ul.menu li a:hover
Простое вертикальное меню делается аналогично, за исключением отсутствия в
ul.menu li элемента float: left;
Можем несколько расширить наше простое меню в визуальном плане при помощи средств стандартной для Joomla библиотеки mootools. Например добавить анимацию при наведении на ссылку
В поле между тэгами
<head> </head>
Вашего шаблона, добавляем
<script type="text/javascript">
window.addEvent('domready', function(){
var el = $$('#my_menu li'),
color = el.getStyle('backgroundColor', '#333');
$$('#my_menu li').set('margin', 0).addEvents({
mouseenter: function(){
this.morph({'margin-left': 5,'background-color': '#676768'});},
mouseleave: function(){
this.morph({margin: 0,backgroundColor: color});
}});
});
</script>
В строках
'background-color': '#...'
Редактируем цвет кнопок.
Ниже в шаблоне, позицию для модуля меню оборачиваем блоком
<div class="my_menu"></div>
То есть выглядеть это будет примерно следующим образом
<div id="my_menu">
<jdoc:include type="modules" name="leftmenu" />
</div>
За работоспособносьт примера ручаться не стану по ряду причин, но в общих чертах думаю понятно, каким образом возможно назначить различные эффекты для нашего меню.
Создание выпадающего меню средствами CSS.
На странице сайта должны появиться дочерние пункты меню рядом с родительским.
В файл template.css шаблона добавляем строчки:
ul.menu {
position: absolute;
top: 78px;
left: 172px;
list-style-type: none;
padding:<span>0</span>;
margin:<span>0</span>;
}
ul.menu li {
float: left;
list-style-type: none;
padding-left:<span>10px</span>;
padding-right:<span>10px</span>;
padding-bottom:<span>0px</span>;
padding-top:<span>0px</span>;
background-image: url(../images/menu_sep<span>.gif</span>);
background-position: right top;
background-repeat: no-repeat;
position:relative;
}
ul.menu a {
display: block;
height: 22px;
padding: 0 10px;
overflow: hidden;
color: #7a7a7a;
font-family:Grotic;
font-style:bold;
font-size: 11px;
text-transform: uppercase;
text-decoration:none;
padding-top:<span>3px</span>;
}
ul.menu li.active a, ul.menu li a:hover {
color:#E8A03D;
}
ul.menu li a, ul.menu li.active ul li a {
color:#7a7a7a;
}
ul.menu li ul {
display:none;
position:absolute;
top:<span>2em</span>;
left:<span>0</span>;
padding:<span>0px</span> 0px 7px;
margin:<span>0px</span> 0px 7px;
background-color:white;
opacity:<span>0</span>.<span>75</span>;
}
ul.menu li:hover ul {
display:block;
}
ul.menu li:hover ul li a{
height:auto;
}
Вертикальное это меню или горизонтальное, сторону, в которой отображаются подпункты при наведении можно настроить в каскаде
ul.menu li ul
оперируя свойствами
top:2em;
left:0;
padding:0px 0px 7px;
margin:0px 0px 7px;
Из минусов данного метода можно выделить сложности с IE6 — не воспринимает :hover, лечится костылями на JS, Сложности с восприятием 4го и более уровней. То есть подобным методом корректно можно обработать вложениея лишь до 3го уровня включительно. Если нужно обработать больше вложений, рекомендую использовать средства JS.
Выпадающее меню на JS+CSS.
Создаем отдельный файл menu.js, в него заносим код:
window.addEvent('domready', function() {
var Element = $$('.moduletable_shop ul.menu li.parent').set({
'events': {
'mouseover': function(){ this.addClass('hilite') },
'mouseleave': function(){ this.removeClass('hilite') }
}
});
});
В CSS добавляем:
ul.menu li ul{
ul.menu li ul{
display:block;
z-index:<span>-2</span>; /*Здесь прячем подпункты на нижние слои*/
position:absolute;
margin-left: 220px; /*Отступ справа = ширина родительского пункта меню*/
margin-top: -93px; /*Отступ снизу = высота родительского пункта меню*/
}
ul.menu li.hilite ul{
z-index:<span>100</span>; /*Вот здесь класс hilite наш - выводим меню в верхние слои*/
}
Оперируя свойствами
margin-left: 220px;
margin-top: -93px;
добиваемся четкого отображения раскрывающихся категорий.
3) Устраняем недочеты.
В стандартном mod_mainmenu существуют несколько досадных недоработок. Если на сайте используется несколько модулей меню на основе стандартного mod_mainmenu – мы получаем ошибку валидации – для каждого активного пункта меню UL LI создается id=«current» (в случае создания связанных меню, многоуровневых либо просто дублирование модуля) Лечится просто – в файле templates/шаблон/html/mod_mainmenu/default.php (что это такое и что делать если такого файла нет – объяснять не буду, читаем документацию по шаблонизации движка) находим строку примерно 71
$node->addAttribute('id', 'current');
и заменяем на
$node->addAttribute('id', 'current'.$id);
Теперь у нас к каждому current добавляется идентификатор itemid.
Для лучшей поисковой оптимизации к каждой ссылке на сайте рекомендуется добавлять атрибут title="" с описанием. В стандартном модуле его нет, но лечится весьма не сложно.
Копируем файл modules/mod_mainmenu/tmpl/default.php в папку шаблона, т.е. он должен размещаться по адресу templates/название_шаблона/html/mod_mainmenu/default.php
Открываем файл, находим строку
if (isset($path) && $node->attributes('id') == $path[0]) {
и перед ней вставляем код
if ($node->name() == 'a') {
$children = $node->children();
foreach ($node->children() as $child)
{
if ($child->name() == 'span') {
$node->addAttribute('title', $child->_data);
}
}
}
Теперь у нас ссылки меню получают атрибут title="".
Мне кстати как не верстальщику такие штуки очень интересны)
Благодарю, полезный материал.