Выпадающее меню с любым уровнем вложенности

Главные вкладки

Аватар пользователя sasa-zmei sasa-zmei 22 сентября 2007 в 1:46

В общем пока лазил по сайтам - этом и том(drupal.org) - натыкался на массу вопросов по поводу выпадающего меню.
Так как модуль NiceMenu меня просто убил своим вариантом отображения, решил подсобить себе (попрактиковаться) и пролетариату (вдруг кому пригодится).

В общем модуль создаёт выпадающее меню которое корректно работает на Drupal 5.Х IE6 & Firefox2.0.0.6 (проверял)

IE7 как только поставлю - так и проверю.

Модуль принимает меню которые пользователь создаёт сам. Под такое меню он с лёгкой руки подписывает и Primary links.
Разобраться с Navigation оказалось большим геморроем, да и извращение это будет если его в раскрывающееся затолкать. Лучше в созданном своём меню сделать ссылку на пункт меню Navigation.

Выбирается меню в пункте настройки доступном по пути:
Administer->Site configuration->Drop menu appointed by user

В таблице variable БД создает строку со значением в поле name равным drop_menu_temp_options и строку со значением drop_menu_id

Вот, буду рад любой критике.
Кстати, по умолчанию пункты выглядят ужасающе - ибо стили не настраивал у них. Всёравно каждый будет подгонять под свою тему.

В скорости, если надо, выложу рисунок со структурой меню - чтобы легче было со стилями разбираться, ибо у мя там свой стиль для каждой "детальки".

ВложениеРазмер
Файл user_drop_menu.rar10.42 КБ

Комментарии

Аватар пользователя oblivion oblivion 22 сентября 2007 в 13:38

нужный модуль
но сразувозник вопрос как сделать выпадающий список не горизонтальный а вертикальный?
и еще не большое замечание: readme файл все таки надо выкладывать

Аватар пользователя sasa-zmei sasa-zmei 22 сентября 2007 в 19:58

ibragim
readme будет через неделю(загруз на работе). По поводу вертикального выпадающего немного непонял: чтобы главные пункты были расположенны один под другим, или чтобы выпадали вниз? В общем-то первый вариант работает когда меню расположено в правом или левом столбце, а второй когда меню расположено врегионе наподобие footer или header.

PVasili,
Насколько я понял, нужно мои стили дооформить? Постараюсь в течении недели-двух (скорее двух), спасибо за ссылки.

ibragim
Рад что пригодилось.

Аватар пользователя igdrasil@drupal.org igdrasil@drupal.org 22 сентября 2007 в 20:08

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

Аватар пользователя sasa-zmei sasa-zmei 22 сентября 2007 в 20:18

Да, пока readme не сделал:

Так как пользователь может создать регион с любым названием, то блок иногда не сможет понять куда его разместили.
Блок определяет регионы по нескольким общеупотребительным названиям:

top
header
footer
bottom
right
left

Если вводится регион с новым названием, то необходимо указать модулю как его понимать(проще на кого из общих он похож).
Это также необходимо для того, чтобы модуль выдавал правильную верстку: для header&top - главные пункты в строчку, выпающие вываливаются в низ; для left главные пункты выводятся в несколько строк, выпадающие вываливаются вправо и т.д.

Объясняют модулю на что похож регион в файле config.conf
Он представляет из себя текстовый файл, скажем так, ini-формата.

Пример:
Создали новый регион с именем content_bottom. Он у нас, допустим, будет располагаться внизу страницы наподобие региона bottom(горизонтально), объясняем модулю что главные пункты надо выводить так же, как если бы мы меню располагали в регионе с именем bottom(главные в ряд, выпадающие вываливаются вверх):

[associations]
content_bottom = bottom

Аватар пользователя edhel edhel 23 сентября 2007 в 7:46

А кто-нибудь видел нормальное разворачивающееся меню (не выпадающее как тут) как в javascript tools, но без ajax? А то притормаживает загрузка ajax-ом, что и юзать не хочется это разворачивание...

Аватар пользователя sasa-zmei sasa-zmei 24 сентября 2007 в 9:12

igdrasil@drupal.org
Спасибо. Если что что-нить спрошу Smile
Думаю на следующей неделе будет готов вашь вариант.
Но есть одно но - на медленных компах в IE притормаживать немного будет. В Firefox работает быстрее.

ЗЫ: IE - что с него возьмешь Smile

Аватар пользователя igdrasil@drupal.org igdrasil@drupal.org 25 сентября 2007 в 3:16

SimpleMenu, к сожалению, удобен только администраторам сайта, в дизайн, без переработки, его нереально вписать. но можно использовать как базу для написания своего модуля (код его я не смотрел, так что не могу утверждать, что это хорошая база)

Аватар пользователя sasa-zmei sasa-zmei 25 сентября 2007 в 23:08

Так, господа... Щас работаю над просьбой тов. igdrasil@drupal.org.

Возник трабл: кто мне подскажет как найти в IE аналог Firefox-овского window.scrollY ?
Я всю голову изломал.
Проще - надо узнать на сколько проскроленно окно. Весь затык в IE, под Firefox-ом просьба товарища работает, а под IE низнаю как Sad

Затык в том что, по видимому, получить проскроленность окна в IE нельзя, если скролл возникает в, например, div-е который содержит весь контент. Можно конечно искать этот див и найти, но вот вопрос - целесообразно-ли? И может статься что по верстке меню будет совсем не в этом диве или не в диве вовсе...

Ждёмс советов. Вопрос еще на одном форуме разместил - там пока тишина Sad

Аватар пользователя sasa-zmei sasa-zmei 26 сентября 2007 в 22:56

Так проблема решена...
Готово будет на следующей неделе, правда CSS останется таким же и пока без readme

Меню будет идти с совершенно диким фоном и бордюрами - дабы можно было увидеть что как оно выводить и есть ли "отражение".

Да, исправлю недостатки с правами - они раньше чисто номинальные были в модуле, от настроек совершенно не зависели.

Аватар пользователя sasa-zmei sasa-zmei 30 сентября 2007 в 18:46

Во общем выкладываю просьбу igdrasil@drupal.org-а.

Там же есть и структура и небольшой readme.

Я вроде как бы посмотрел-проверил, на первый взгляд работает. Но всё же с нетерпением жду багов Smile

js-файл получился тяжёлым - 57кб против 17кб без отражения, так что имею мысль сделать два модуля - один с отражением, другой без. Пусть каждый выбирает то что ему нужно, ибо на мой взгляд довольно редко бывают ситуации когда необходимо отражение(оочень большое меню). Так же модуль без отражения меньше грузит браузер - на медленных компах однако заметно(видел лично).

Конечно js-файл попытаюсь облегчить - уберу все комментарии и ненужные пробелы, но не думаю что это даст ощутимый результат.

Вскорости выложу подправленный первый вариант (без отражения).

ЗЫ: а красивость при закачке файла реализована стандартным средством Drupal-а?

Аватар пользователя Fil Fil 2 октября 2007 в 17:43

Я вот недавно заменил стандартное меню на сайте на nice_menus. Отличный модуль: 3 варианта меню для правой стороны страницы/левой/верха. Можно назначить произвольное количество блоков и в каждом выбрать подраздел меню, который будет обрабатываться этим модулем. навигацию модуль скушал просто на ура. косяков пока не нашел. Вот только оформление страдает... надо-бы посимпатичнее стиль прикрутить.
В чём мораль? Да в том что к замене стандартного меню на выпадающее меня подтолкнуло изменение в навигации (5-и уровневое меню ну никак не влезает в колонку) т.к. у меня 3-х колоночная вёрстка. А смысла городить огород из JS и CSS без поддержки навигации я не вижу вообще....

Аватар пользователя restyler restyler 6 декабря 2007 в 20:35

Делал недавно просто разворачивающееся onclick меню, если кому интересно - вот реализация (левое меню), вот код:

<?php
$(document).ready( function() {

if(window.location.href.split("#")[0].split("/").length > 3) {
var path = '';
for(var i=3; i< window.location.href.split("#")[0].split("/").length;i++) {

path += "/" + window.location.href.split("#")[0].split("/")[i];
}

$("#block-menu-2 ul.menu").find("ul>li>a[href*=" + path + "]").parent().parent().toggle();

$("#block-menu-2 ul.menu").find("li>a[href*=" + path + "]").siblings('ul').toggle();
}

$("#block-menu-2 ul.menu").find("ul").toggle();
$("#block-menu-2 ul.menu>li.expanded>a").click(function() {$(this).parent().find('ul').slideToggle();return false; } );
$("#block-menu-2 ul.menu>li.expanded>a").dblclick(function() { window.location = this.href; } );
}
);
?>

Аватар пользователя darksmoke darksmoke 22 сентября 2009 в 0:00

"restyler" wrote:
<?php
$(document).ready( function() {

if(window.location.href.split("#")[0].split("/").length > 3) {
var path = '';
for(var i=3; i< window.location.href.split("#")[0].split("/").length;i++) {

path += "/" + window.location.href.split("#")[0].split("/")[i];
}

$("#block-menu-2 ul.menu").find("ul>li>a[href*=" + path + "]").parent().parent().toggle();

$("#block-menu-2 ul.menu").find("li>a[href*=" + path + "]").siblings('ul').toggle();
}

$("#block-menu-2 ul.menu").find("ul").toggle();
$("#block-menu-2 ul.menu>li.expanded>a").click(function() {$(this).parent().find('ul').slideToggle();return false; } );
$("#block-menu-2 ul.menu>li.expanded>a").dblclick(function() { window.location = this.href; } );
}
);
?>


А куда этот код пихать?
Мне как раз такое ОЧЕНЬ надо.