Модуль ajaxmenu - подгрузка collapsed пунктов меню на лету
Прислано: t3hk0d3
вт, 31/08/2010 - 07:44
Позволяет подгружать скрытые (collapsed) пункты меню на лету.
Мне это помогло значить сократить размер изначальной загружаемой страницы (более тысячи пунктов меню, каталог стран/городов/отелей).
После установки нужно сбросить кеш.
Надеюсь кому-нибудь пригодится.
Пришлось использовать хак с подменой обработчика menu_item_link - через хук theme_registry_alter меняется на свой обработчик, а старый запоминается в параметр original_function. Обработчик в атрибуты ссылки дописывает id для ссылки содержащий mlid и передает вызов дальше в оригинальный обработчик. Кстате такой способ можно использовать для перехвата почти всех вызовов функций от theme (для шаблонов есть template_preprocess).
Потом яваскрипт вытаскивает mlid из id ссылки, и вешает обработчик наведения мышки с отсечкой (срабатывает если мышь более полусекунды задерживается на пункте меню), который делает аяксовый запрос детей для нужного пункта меню по mlid.
| Прикрепленный файл | Размер |
|---|---|
| ajaxmenu.tgz | 1.64 кб |
- t3hk0d3's blog
- Для комментирования войдите или зарегистрируйтесь
Не велосипед ли?
upd. http://drupal.org/project/dhtml_menu
- Для комментирования войдите или зарегистрируйтесь
Где бы в дествии посмотреть?
- Для комментирования войдите или зарегистрируйтесь
Где бы в дествии посмотреть?
+100500
- Для комментирования войдите или зарегистрируйтесь
Не велосипед ли?
upd. http://drupal.org/project/dhtml_menu
Насколько я понял, DHTML Menu грузит сразу все меню внутрь и открывает меню показывает только по клику. Мой же модуль грузит потомков через ajax. dhtml_menu - это скорее полное решение выпадающего меню. Мой-же вариант не предлагает какого-либо варианта - просто добавляет потомков внутрь DOM дерева, будь то выпадающее, выкатывающееся, материализующееся, итп меню.
Мой модуль скорее для создателей тем, чем для обычных владельцев друпал-сайтов.
Если уж сравнивать то только с activemenu. Но он плох для темизации (сам перехватывает menu_item_link и все там делает, а не вызывает оригинальный обработчик).
- Для комментирования войдите или зарегистрируйтесь
Где бы в дествии посмотреть?
+100500
К сожалению проект на котором этот модуль работает сейчас в разработке, те показывать нельзя :)
Придумаю что-нибудь :)
upd http://terra-rossi.dev.4dweb.ru/country/finlyandiya
Посмотреть можно если посмотреть сверху по Страны (Западная Европа например)
- Для комментирования войдите или зарегистрируйтесь
Если навожу на "Подожите", меню пропадает.
- Для комментирования войдите или зарегистрируйтесь
Если навожу на "Подожите", меню пропадает.
Ок, это баг скрипта который отвечает за выпадающее меню.
Спасибо, пофиксили :)
- Для комментирования войдите или зарегистрируйтесь
Типа такого http://www.drupal.ru/node/23196?
- Для комментирования войдите или зарегистрируйтесь
Вот там сидит реальный велосипедостроитель :) Там меню хранится в своих таблицах, выводится своим блоком, все отдельно и параллельно друпаловскому меню.
- Для комментирования войдите или зарегистрируйтесь
Если просто водить мышью над пунктами, ждать, не ждать, кликать, тыркаться, появляются баги(скорее всего в скриптах):
- Старые раскрытые не закрываются
- Накладываются друг на друга
- Иногда(если не "дождаться" появления пунктов, а перескочит на другой пункт, и обратно, старый пункт уже не подгружается (не "Подождите"))
Смотрел в хроме.
- Для комментирования войдите или зарегистрируйтесь
В данном случае проблема не со скриптами модуля, а со скриптами выпадающего меню. Как я писал - проект в разработке. Проблема в том что брали jquerymenu (я был против :)), в конце концов его сильно переписали. Планирую переписать это всё, но пока есть задачи важнее :) В данном случае важна демонстрация того что пункты меню подгружаются, за остальное модуль не отвечает.
А вообще спасибо, большинство пунктов надеюсь поправили :)
- Для комментирования войдите или зарегистрируйтесь
а почему AJAX когда в модуле используется AHAH
- Для комментирования войдите или зарегистрируйтесь
а почему AJAX когда в муле используется AHAH
Для конечного пользователя понятнее AJAX. Дивелоперы сами разберутся IMHO. Это ведь везде не только в друпале.
эм-де-инк блин, опять ты?
- Для комментирования войдите или зарегистрируйтесь
А что кроме него Умных тут нет?
- Для комментирования войдите или зарегистрируйтесь
http://drupal.org/project/jquerymenu не то?
- Для комментирования войдите или зарегистрируйтесь
А что кроме него Умных тут нет?
Не умный а умник.
- Для комментирования войдите или зарегистрируйтесь
попробовал.
при подключении много раз (надо считать? мне лень, сколько именно...) выдает:
warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'ajaxmenu_menu_item_link' not found or invalid function name in Z:\home\s-horoscope.ru\www\sites\all\modules\ajaxmenu\ajaxmenu.module on line 88.
я гадкий противный новичёк, не знающий программирования. Меня можно научить запускать этот модуль?
- Для комментирования войдите или зарегистрируйтесь
эм-де-инк блин, опять ты?
Угадай с трёх раз
- Для комментирования войдите или зарегистрируйтесь
Угадай с трёх раз
Достаточно заглянуть на гитхаб.
- Для комментирования войдите или зарегистрируйтесь
Достаточно заглянуть на гитхаб.
А ведь точно, я до этого по косвенным признакам определил.
- Для комментирования войдите или зарегистрируйтесь
Кстати, когда увидет свет ООП-Друпал?
- Для комментирования войдите или зарегистрируйтесь
Кстати, когда увидет свет ООП-Друпал?
Дрис сказал к 2020-му)))
- Для комментирования войдите или зарегистрируйтесь
Дрис сказал к 2020-му)))
Ну это Дрис.
История, к сожалению, не сохранила, как один товарищ с ником MDinc клялся и божился что он знает Друпал лучше всех на свете и в друпале очень недостаёт ООП, но он сейчас работает над супер-релизом, который будет воркать на ООП и останется совместимым с обычными модулями
- Для комментирования войдите или зарегистрируйтесь
Достаточно заглянуть на гитхаб.
К тому времени PHP 5x будет историей
- Для комментирования войдите или зарегистрируйтесь
К тому времени PHP 5x будет историей
Drupy или какй-нить порт на другой язык станет новым друпалом :D
Это как шутка про русских и про водку. Там где появится водка, там и будет... Россия!
- Для комментирования войдите или зарегистрируйтесь
а как это скажется на взаимодействии с поисковиками ?
- Для комментирования войдите или зарегистрируйтесь
а как это скажется на взаимодействии с поисковиками ?
Никак, потому-что этот модуль только грузит collapsed пункты меню.
Общий совет: Если есть проблемы с поисковиками - используйте карту сайта (модуль sitemap).
- Для комментирования войдите или зарегистрируйтесь
попробовал.
при подключении много раз (надо считать? мне лень, сколько именно...) выдает:
warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'ajaxmenu_menu_item_link' not found or invalid function name in Z:\home\s-horoscope.ru\www\sites\all\modules\ajaxmenu\ajaxmenu.module on line 88.
я гадкий противный новичёк, не знающий программирования. Меня можно научить запускать этот модуль?
Что за версия друпала?
- Для комментирования войдите или зарегистрируйтесь
Что за версия друпала?
блин. не заметил сразу вашего ответа.
Пробовал в двух разных 6.17 (на сайте и в Денвере)
Сейчас поставил 6.19, может помочь?
- Для комментирования войдите или зарегистрируйтесь
Что за версия друпала?
блин. не заметил сразу вашего ответа.
Пробовал в двух разных 6.17 (на сайте и в Денвере)
Сейчас поставил 6.19, может помочь?
UPD Нашёл в чем ошибка, перезалил файл.
- Для комментирования войдите или зарегистрируйтесь
UPD Нашёл в чем ошибка, перезалил файл.
угу. пасиб.
я тупой новичёк, программированияв в CMS не знаю, PHP-ов нигде не учил. Только сейчас кое-как оно заработало. Правда, на англицком, ну да ладна. Потом.
===
+
Поработал с этим модулем несколько часов, попробовал отключить... блин! неудобно-то как без него...! включил обратно, и радуюсь :)
- Для комментирования войдите или зарегистрируйтесь
UPD Нашёл в чем ошибка, перезалил файл.
угу. пасиб.
я тупой новичёк, программированияв в CMS не знаю, PHP-ов нигде не учил. Только сейчас кое-как оно заработало. Правда, на англицком, ну да ладна. Потом.
===
+
Поработал с этим модулем несколько часов, попробовал отключить... блин! неудобно-то как без него...! включил обратно, и радуюсь :)
Рад что хоть кому-то пригодилось :)
Перевести можно в Перевод Интерфейса.
- Для комментирования войдите или зарегистрируйтесь









Комментарии