В целом, заявление, конечно, довольно громкое, но, возможно, кому-то пригодится (хуясе запятых сколько). Как известно, на joomla реализовано несколько типов отображения меню, но нет стандартного выпадающего. Есть, помнится, какой-то мудреный компонент, который мутит разные меню, но он там много перековеркивает и вставляет кучу кода, яваскрипта и прочего, а я до этого не большой любитель, поэтому, придумалось мне одно решение
В принципе, все закручено на том, что раз уж джумла по-умолчанию работает с mootools – грешно бы не использовать его могучие возможности. Пришлось, правда, потупить над документацией, но кое-что из этого получилось.
Итак: для начала, создаем меню (мне надо было сделать двухуровневое, поэтому над третьим уровнем я не морочился, и не знаю, можно ли его таким способом реализовать – не думал) – в нем делаем пункты и дочерние пункты – которые собственно и будут появляться при наведении мыши на родительские.
В модуле ставим тип отображения «список» (стандартный) и в настройках – «раскрывать меню», «активировать родителя».
Теперь mootools:
(этот код не забудьте заключить в теги яваскрипта)
window.addEvent('domready', function() {
var Element = $$('.moduletable_shop ul.menu li.parent').set({
'events': {
'mouseover': function(){ this.addClass('hilite') },
'mouseleave': function(){ this.removeClass('hilite') }
}
});
});
Что здесь есть что? Фиг его знает. Уж больно он мутный – mootools, не то что jquery – здесь я просто подладил под себя пример из другой оперы. В общем .moduletable_shop ul.menu li.parent – это селекторы, с помощью которых мы обращаемся к любому раодительскому пункту меню, а дальше устанавливаются два события – по наведению мыши - присвоить класс hilite, при уведении мыши – удалить этот класс. _shop – это в сайте – суффикс модуля – его, понятно, у вас может и не быть или он будет другой.
Дальше css – приводить его здесь не обязательно, скажу лишь, что все дочерние пункты меню… А ладно приведу для ясности:
ul.menu li ul{
display:block;
z-index:-2; /*Здесь прячем подпункты на нижние слои*/
position:absolute;
margin-left: 220px; /*Отступ справа = ширина родительского пункта меню*/
margin-top: -93px; /*Отступ снизу = высота родительского пункта меню*/
}
ul.menu li.hilite ul{
z-index:100; /*Вот здесь класс hilite наш - выводим меню в верхние слои*/
}
Воооот.
А собственно и все.
Вызов скрипта я сначала вставлял в head, но потом оказалось, что некоторые компоненты (например контакты) пишут вызов mootools в самый конец head – и мой скрипт, стоя выше их в коде, не работает, поэтому я стал вставлять его в модуль, который вызываю сразу после открывающего тега body.
Там, конечно есть свои подводные камни – в частности, если список последнего подпунктов последнего родительского пункта очень большой – то они вылезали снизу из под body – пришлось их подравнивать вверх, благо у всех пунктов меню есть id.
Ну и если еще поморочиться можно добавить эффект сглаживания, чтобы не сразу, а как бы проявлялось постепенно.
Пример можно посмотреть здесь
[...] загловок или body. Как правило, это javascript-код. В посте про выпадающее меню на joomla 1.5 – требуется вставлять в контент яваскрипт код в head, [...]
Все подробно описано, жаль только что не все понятно начинающему
Да, чего есть, так это сумбур в объяснениях. Я и сам, когда начинал, во всем этом разбираться очень страдал из-за непонятных объяснений. Вроде все написано, а непонятно. Да и сейчас когда приходится во что-то вникать, тоже возникают сложности.
Вот что я ценю в уроках, статьях (да и вообще) по жизни – так это здоровый юмор! )))
«(этот код не забудьте заключить в теги яваскрипта)
window.addEvent(‘domready’, function() {
…»
Я так и не нашла, где этот код встроен на http://glavoptmebel.ru/ ?
mootools там стандартный джумловский, ни в самом файле index, ни в подключаемых скриптах нет этого кода…
Привет!
Подскажите начинаючему.
Куда нужно вставлять этот код CSS? В шаблон сайта?
Да и про MooTools не совсем понятно
Уж извините за такие вопросы, но не могли бы вы рассказать по подробнее про то куда нужно вставлять эти волшебные коды)))))
Вставляйте в раздел вашего шаблона, например. Или создайте модуль как описано в статье. Там ведь вроде описано?
а я там это убрал. Я тут вот умничаю, а сам туплю очень сильно. Там я сделал просто меню на css.
Тоже заморочился этим. Через гугл вышел на сайт и не дочитал статью… Как только прочел что есть настройки, пошел и увидел там галку всегда показывать подпункты. Отметил и вуаля все выпадает! Вот это действительно без геморроя, спасибо!
Вопрос автору! Я попробовал этот способ, все отлично работает на странице со стандартными джумловскими модулями. Но стоит зайти на страницу со сторонними компонентами, будь то фотогалерея или гостевая книга (в частности Phoca, но я несколько перепробовал), как вылезает JS ошибка: ругается на первую же строчку
window.addEvent(‘domready’, function() {
мол, объект не поддерживает свойство или метод.
Кто-нибудь знает способ решения этой проблемы?..
я как бы новичок во всем этом… и очень сложно понять что написано в этой статье… можно ли ее написать более подробно… тобишь для полных чайников?)
я вообще не могу понять как это сделать :
Теперь mootools:
(этот код не забудьте заключить в теги яваскрипта)
Видать конфликтует с фокой – он скорее всего использует другую библиотеку – jquery и отключает mootools. А js ругается, потому что не знает о таком методе, который как раз и описан в отключенном файле. Тут уж ничего не поделаешь.
зайдите для начала на javascript.ru – что ли, или вообще почитайте по javascript