Модуль 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.tgz1.64 кб

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано vectoroc@drupal.org в вт, 31/08/2010 - 11:07.

Не велосипед ли?
upd. http://drupal.org/project/dhtml_menu


Опубликовано fasdalf@fasdalf.ru в вт, 31/08/2010 - 10:49.

Где бы в дествии посмотреть?


Опубликовано NaZg в вт, 31/08/2010 - 11:02.

"fasdalf@fasdalf.ru" написал(а):

Где бы в дествии посмотреть?

+100500


Опубликовано t3hk0d3 в вт, 31/08/2010 - 11:33.

vectoroc@drupal.org написал(а):

Не велосипед ли?
upd. http://drupal.org/project/dhtml_menu

Насколько я понял, DHTML Menu грузит сразу все меню внутрь и открывает меню показывает только по клику. Мой же модуль грузит потомков через ajax. dhtml_menu - это скорее полное решение выпадающего меню. Мой-же вариант не предлагает какого-либо варианта - просто добавляет потомков внутрь DOM дерева, будь то выпадающее, выкатывающееся, материализующееся, итп меню.
Мой модуль скорее для создателей тем, чем для обычных владельцев друпал-сайтов.

Если уж сравнивать то только с activemenu. Но он плох для темизации (сам перехватывает menu_item_link и все там делает, а не вызывает оригинальный обработчик).


Опубликовано t3hk0d3 в вт, 31/08/2010 - 11:46.

"fasdalf@fasdalf.ru" написал(а):

Где бы в дествии посмотреть?

"NaZg" написал(а):

+100500

К сожалению проект на котором этот модуль работает сейчас в разработке, те показывать нельзя :)
Придумаю что-нибудь :)

upd http://terra-rossi.dev.4dweb.ru/country/finlyandiya
Посмотреть можно если посмотреть сверху по Страны (Западная Европа например)


Опубликовано vgoodvin в вт, 31/08/2010 - 12:06.

Если навожу на "Подожите", меню пропадает.


Опубликовано t3hk0d3 в вт, 31/08/2010 - 13:19.

vgoodvin написал(а):

Если навожу на "Подожите", меню пропадает.

Ок, это баг скрипта который отвечает за выпадающее меню.
Спасибо, пофиксили :)


Опубликовано RxB в вт, 31/08/2010 - 13:54.

Типа такого http://www.drupal.ru/node/23196?


Опубликовано t3hk0d3 в вт, 31/08/2010 - 14:22.

Вот там сидит реальный велосипедостроитель :) Там меню хранится в своих таблицах, выводится своим блоком, все отдельно и параллельно друпаловскому меню.


Опубликовано F10 в вт, 31/08/2010 - 15:29.

Если просто водить мышью над пунктами, ждать, не ждать, кликать, тыркаться, появляются баги(скорее всего в скриптах):
- Старые раскрытые не закрываются
- Накладываются друг на друга
- Иногда(если не "дождаться" появления пунктов, а перескочит на другой пункт, и обратно, старый пункт уже не подгружается (не "Подождите"))

Смотрел в хроме.


Опубликовано t3hk0d3 в вт, 31/08/2010 - 16:03.

В данном случае проблема не со скриптами модуля, а со скриптами выпадающего меню. Как я писал - проект в разработке. Проблема в том что брали jquerymenu (я был против :)), в конце концов его сильно переписали. Планирую переписать это всё, но пока есть задачи важнее :) В данном случае важна демонстрация того что пункты меню подгружаются, за остальное модуль не отвечает.

А вообще спасибо, большинство пунктов надеюсь поправили :)


Опубликовано Mirocow в ср, 01/09/2010 - 19:06.

а почему AJAX когда в модуле используется AHAH


Опубликовано vgoodvin в ср, 01/09/2010 - 04:21.

"Mirocow" написал(а):

а почему AJAX когда в муле используется AHAH

Для конечного пользователя понятнее AJAX. Дивелоперы сами разберутся IMHO. Это ведь везде не только в друпале.

эм-де-инк блин, опять ты?


Опубликовано Mirocow в ср, 01/09/2010 - 19:06.

"vgoodvin" написал(а):

А что кроме него Умных тут нет?


Опубликовано xxandeadxx в ср, 01/09/2010 - 21:39.

http://drupal.org/project/jquerymenu не то?


Опубликовано vgoodvin в чт, 02/09/2010 - 05:06.

"Mirocow" написал(а):

А что кроме него Умных тут нет?

Не умный а умник.


Опубликовано leo7 в пт, 03/09/2010 - 19:13.

попробовал.
при подключении много раз (надо считать? мне лень, сколько именно...) выдает:

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.

я гадкий противный новичёк, не знающий программирования. Меня можно научить запускать этот модуль?


Опубликовано RxB в пт, 03/09/2010 - 19:15.

"vgoodvin" написал(а):

эм-де-инк блин, опять ты?

Угадай с трёх раз


Опубликовано vgoodvin в пт, 03/09/2010 - 20:00.

"RxB" написал(а):

Угадай с трёх раз

Достаточно заглянуть на гитхаб.


Опубликовано RxB в пт, 03/09/2010 - 20:11.

"vgoodvin" написал(а):

Достаточно заглянуть на гитхаб.

А ведь точно, я до этого по косвенным признакам определил.


Опубликовано RxB в пт, 03/09/2010 - 20:15.

"Mirocow" написал(а):

Кстати, когда увидет свет ООП-Друпал?


Опубликовано xxandeadxx в пт, 03/09/2010 - 20:25.

"RxB" написал(а):

Кстати, когда увидет свет ООП-Друпал?

Дрис сказал к 2020-му)))


Опубликовано RxB в пт, 03/09/2010 - 20:31.

"xxandeadxx" написал(а):

Дрис сказал к 2020-му)))

Ну это Дрис.
История, к сожалению, не сохранила, как один товарищ с ником MDinc клялся и божился что он знает Друпал лучше всех на свете и в друпале очень недостаёт ООП, но он сейчас работает над супер-релизом, который будет воркать на ООП и останется совместимым с обычными модулями


Опубликовано Mirocow в пт, 03/09/2010 - 21:26.

"xxandeadxx" написал(а):

Достаточно заглянуть на гитхаб.

К тому времени PHP 5x будет историей


Опубликовано vgoodvin в сб, 04/09/2010 - 09:17.

"Mirocow" написал(а):

К тому времени PHP 5x будет историей

Drupy или какй-нить порт на другой язык станет новым друпалом :D
Это как шутка про русских и про водку. Там где появится водка, там и будет... Россия!


Опубликовано Jackinua в вс, 05/09/2010 - 12:44.

а как это скажется на взаимодействии с поисковиками ?


Опубликовано t3hk0d3 в пн, 06/09/2010 - 07:22.

Jackinua написал(а):

а как это скажется на взаимодействии с поисковиками ?

Никак, потому-что этот модуль только грузит collapsed пункты меню.

Общий совет: Если есть проблемы с поисковиками - используйте карту сайта (модуль sitemap).


Опубликовано t3hk0d3 в пн, 06/09/2010 - 07:23.

leo7 написал(а):

попробовал.
при подключении много раз (надо считать? мне лень, сколько именно...) выдает:

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.

я гадкий противный новичёк, не знающий программирования. Меня можно научить запускать этот модуль?

Что за версия друпала?


Опубликовано leo7 в пн, 06/09/2010 - 13:06.

"t3hk0d3" написал(а):

Что за версия друпала?

блин. не заметил сразу вашего ответа.
Пробовал в двух разных 6.17 (на сайте и в Денвере)
Сейчас поставил 6.19, может помочь?


Опубликовано t3hk0d3 в пн, 06/09/2010 - 14:44.

leo7 написал(а):
"t3hk0d3" написал(а):

Что за версия друпала?

блин. не заметил сразу вашего ответа.
Пробовал в двух разных 6.17 (на сайте и в Денвере)
Сейчас поставил 6.19, может помочь?

UPD Нашёл в чем ошибка, перезалил файл.


Опубликовано leo7 в вс, 12/09/2010 - 19:42.

"t3hk0d3" написал(а):

UPD Нашёл в чем ошибка, перезалил файл.

угу. пасиб.

я тупой новичёк, программированияв в CMS не знаю, PHP-ов нигде не учил. Только сейчас кое-как оно заработало. Правда, на англицком, ну да ладна. Потом.

===
+
Поработал с этим модулем несколько часов, попробовал отключить... блин! неудобно-то как без него...! включил обратно, и радуюсь :)


Опубликовано t3hk0d3 в пн, 13/09/2010 - 08:02.

leo7 написал(а):
"t3hk0d3" написал(а):

UPD Нашёл в чем ошибка, перезалил файл.

угу. пасиб.

я тупой новичёк, программированияв в CMS не знаю, PHP-ов нигде не учил. Только сейчас кое-как оно заработало. Правда, на англицком, ну да ладна. Потом.

===
+
Поработал с этим модулем несколько часов, попробовал отключить... блин! неудобно-то как без него...! включил обратно, и радуюсь :)

Рад что хоть кому-то пригодилось :)
Перевести можно в Перевод Интерфейса.


Новое на сайте